const curryByBind = (fn) => fn.length === 0 ? fn() : (arg) => fn.bind(null, arg);
const sum = (x,y) => x y;
const sumMany = curryByBind(sum);
console.log(sumMany(1)(2)())
I'm trying to learn curry
and attempting to inject arguments into function via bind
, I was thinking sumMany(1)
should return a function that can take (2)
which eventually at last execute fn()
, but I cant figure out which part gone wrong, it's saying sumMany(...)(...) is not a function
?
CodePudding user response:
Your curryByBind
is working fine: the only problem is that you ran out of arguments.
sum(x, y)
takes two arguments. After calling sumMany
with one argument (sum
's x
), it returns a function expecting a single argument (sum
's y
).
After you call that function with one argument, you have supplied values for all of sum
's arguments, so it returns 3. (Which is not a function, hence the error when you try calling it.)
console.log(sumMany(1)(2))
logs 3, as expected.