示例:
版本1:
const foo = (arg1) => {
return (arg2) => {
return (arg3) => {
return arg1 + arg2 + arg3;
}
}
}
// called as part of a pipe:
const result = pipe(bar, foo(arg1)(arg2), baz);
第2版:
const foo = (arg1, arg2, arg3) => {
return arg1 + arg2 + arg3;
}
// called as part of a pipe:
const result = pipe(bar, _curry(foo)(arg1)(arg2), baz);
在版本2中,方法实现更清晰,更优雅,但是调用有点丑陋。由于方法调用(希望)出现在代码库中的多个位置,我正在尝试确定哪个版本具有较少的缺点。
我希望我不需要解释为什么我想使用curried函数并传递单个参数。请从功能性编程的角度来处理问题。
提前致谢!
答案 0 :(得分:0)
您可以使用该函数的arguments
对象,以防您不知道有多少参数可能是这样的:
function foo() {
var sum = 0;
for(var i = 0; i < arguments.length; i++)
sum += arguments[i];
return sum;
}
console.log(foo());
console.log(foo(1, 2, 3));
console.log(foo(5, 6, 3, 7, 1, 10));
&#13;
如果你想要一个独立于参数数量的currying而不使用_.curry
强制它,那么使用它:
function foo(a) {
var sum = 0;
var _ = function(a) {
if(a === undefined)
return sum;
else {
sum += a;
return _;
}
}
return _(a);
}
console.log(foo());
console.log(foo(1)(2)());
console.log(foo(1)(2)(7)(10)(5)());
&#13;