JavaScript咖喱函数
我以这种方式实现了一个JavaScript咖喱函数,javascript,partial-application,Javascript,Partial Application,我以这种方式实现了一个curry函数: function curry (fn) { var slice = Array.prototype.slice, args = slice.apply(arguments, [1]); return function () { fn.apply(null, args.concat(slice.apply(arguments))); }; } 当我使用上述函数执行以下操作时 function add
curry
函数:
function curry (fn) {
var slice = Array.prototype.slice,
args = slice.apply(arguments, [1]);
return function () {
fn.apply(null, args.concat(slice.apply(arguments)));
};
}
当我使用上述函数执行以下操作时
function add (x, y) {
return x + y;
}
var inc = curry(add, 1);
console.log(inc(10));
它记录未定义的
。11不是预期的产量吗?我的代码有什么问题
注意:使用
console.log(x,y)
在add
函数日志110
中。我不明白为什么它返回未定义的
您的curry函数中缺少一个返回
即
这似乎有效:)这是咖喱功能的一个示例:
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);
}
此curry函数创建任何函数的curry版本。可以将部分参数应用于新函数。对于每个部分应用程序,它将返回一个函数,该函数接受其余参数。一旦应用了原始函数的所有参数,它将返回一个值。正确的术语是部分应用函数-不是严格的套用…但仍然很好!实际上不是咖喱,它是部分应用程序。我知道我正在恢复一个非常旧的线程,但是将
[1]
作为参数应用到参数
实现了什么?它将从参数列表中删除传递的函数!
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);
}