问题
I have implemented a curry
function this way:
function curry (fn) {
var slice = Array.prototype.slice,
args = slice.apply(arguments, [1]);
return function () {
fn.apply(null, args.concat(slice.apply(arguments)));
};
}
When I use the above function to do the following
function add (x, y) {
return x + y;
}
var inc = curry(add, 1);
console.log(inc(10));
it logs undefined
. Isn't 11 the expected output? What is wrong with my code?
Note: Using console.log(x, y)
inside the add
function logs 1 10
. I don't understand why it returns undefined
.
回答1:
You're missing a return
in your curry function.
I.e.
return function () {
return fn.apply(null, args.concat(slice.apply(arguments)));
};
That seems to work :)
回答2:
This is an example of curry function:
function curry(func) {
var initial_args = [].slice.apply(arguments, [1]);
var func_args_length = func.length;
function curried(args) {
if (args.length >= func_args_length) {
return func.apply(null, args);
}
return function () {
return curried(args.concat([].slice.apply(arguments)));
};
}
return curried(initial_args);
}
This curry function creates a curried version of any function. You can partially apply parameters to the new function. For each partial application, it will return a function that takes the rest of the parameters. Once all parameters of the original function are applied, it will return a value.
来源:https://stackoverflow.com/questions/4394747/javascript-curry-function