Tell us what’s happening:
I was hoping to be able to solve this one with some sort of currying behaviour but I failed (instead I used the rest operator to solve it). If anyone can message me a possible solution with currying I would be grateful for the opportunity to learn!
Your code so far
function addTogether(x, ...arg) {
if (arg.length == 0) {
if (Number.isInteger(x)) {
return function (y) {
if (Number.isInteger(y)) {
return x+y;
}
};
}
} else {
if (Number.isInteger(arg[0]))
return x + arg[0];
}
}
addTogether(2,3);
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
.
Link to the challenge:
https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/arguments-optional
Hi @hbar1st
You are using currying, by catering for the use-case where the function is called like this: addTogether(2)(3)
. You are splitting the arguments up into a sequence of evaluations (function calls), which is essentially what currying is. See here for more info.
Thanks joe, I didn’t realise that. I was trying to figure out a way to use the bind operation but nothing i could think of worked. Do you know if there is a way to use it here?
Bind only works on existing functions, so you could do this:
function addTogether(x, ...arg) {
if (arg.length === 0) {
if (Number.isInteger(x)) {
return function(x, y) { // extra paremeter here
if (Number.isInteger(y)) {
return x + y
}
}.bind(null, x) // function bound here
}
} else {
if (Number.isInteger(arg[0])) {
return x + arg[0]
}
}
}
However, in the case of currying, it kinda adds unnecessary code and makes it a little unreadable. Anybody that understands JS and closure will know whats happening with your code, using bind
complicates it a little.
1 Like