我正在尝试实现当前功能:
function sum(a, b, c) {
console.log('SUM'+JSON.stringify(arguments))
return a + b + c;
}
var curry= function (func,...n) {
return function(...args2) {
//console.log('arg2s'+args2)
return func.apply(this,n.concat(args2));
};
}
curry(sum,1,2)(3) //SUM{"0":1,"1":2,"2":3}, O/P:6
上面给出了正确的输出,但我没有必要使用应用。
因此,如果我将我的函数更改为:
var curry= function (func,...n) {
return function(...args2) {
//console.log('arg2s'+args2)
return func(n.concat(args2));
};
}
curry(sum,1,2)(3) //SUM{"0":[1,2,3]} O/P:"1,2,3undefinedundefined"
我基本上有两个问题:
为什么直接调用func时curry的实现不起作用?为什么输出如此奇怪?
2.如何以如下方式更改函数并返回和:curry(1)(2)(3)/curry(1,2)(3)/curry(1,2)(1,2,3)等。我可以在网上找到一些解决方案,但无法理解。
例:
function curry(func) {
return function curriedFunc(...args) {
if (args.length >= func.length) {
return func.apply(this, args);
} else {
return function(...args1) {
return curriedFunc.apply(this, args.concat(args1));
}
}
};
}
任何帮助都将不胜感激!!
发布于 2020-04-25 22:29:37
您的func
接受三个参数:a
、b
和c
。当你这样做时:
return func(n.concat(args2));
你要给它传递一个参数,一个数组。相当于:
const arr = n.concat(args2);
return func(arr);
听起来,您可能希望将参数扩展到func
调用中,而不是:
return func(...n, ...args2)
使用扩展语法,迭代中的每个项都被放入一个参数中。例如,如果n
数组有一个项,它被设置为传递给func
的第一个参数,如果args2
有2个项,第一个被设置为传递的第二个参数,第二个被设置为传递的第三个参数。
function sum(a, b, c) {
console.log('SUM' + JSON.stringify(arguments))
return a + b + c;
}
var curry = function(func, ...n) {
return function(...args2) {
return func(...n, ...args2);
};
}
curry(sum, 1, 2)(3);
如何以如下方式更改函数并返回和: curry(1)(2)(3)/curry(1,2)(3)/curry(1,2,3)等
跟踪在第一次调用函数时创建的闭包中传递的参数总数。在返回的函数中,将所有参数推送到数组中,如果数组的长度为3,则返回和,否则再次返回函数:
function sum(a, b, c) {
return a + b + c;
}
var curry = function(func, ...argsSoFar) {
const neededArgs = func.length;
const returnedFn = (...args) => {
argsSoFar.push(...args);
if (argsSoFar.length === neededArgs) {
return func(...argsSoFar);
} else {
return returnedFn;
}
};
return returnedFn;
}
console.log(
curry(sum, 1, 2)(3),
curry(sum)(1, 2)(3),
curry(sum)(1)(2, 3),
curry(sum)(1)(2)(3),
);
https://stackoverflow.com/questions/61436615
复制相似问题