gpt4 book ai didi

Javascript 函数挑战 add(1,2) 和 add(1)(2) 都应返回 3

转载 作者:搜寻专家 更新时间:2023-11-01 04:50:10 25 4
gpt4 key购买 nike

我的一个 friend 向我提出挑战,要求我编写一个适用于这两种情况的函数

add(2,4)  // 6
add(2)(4) // 6

我的直觉是编写一个返回自身的 add() 函数,但我不确定我的方向是否正确。这失败了。

function add(num1, num2){
if (num1 && num2){
return num1 + num2;
} else {
return this;
}
}

alert(add(1)(2));

所以我开始阅读返回其他函数或返回自身的函数。

我会继续尝试,但如果有人有一个巧妙的解决方案,我很乐意看到它!

最佳答案

我写了一个curried function谁的valueOf()方法和function context (this)无论每次传递多少参数,都与 sum 绑定(bind)。

/* add function */
let add = function add(...args) {
const sum = args.reduce((acc, val) => acc + val, this);
const chain = add.bind(sum);
chain.valueOf = () => sum;
return chain;
}.bind(0);

/* tests */
console.log('add(1, 2) = ' + add(1, 2));
console.log('add(1)(2) = ' + add(1)(2));
/* even cooler stuff */
console.log('add(1, 2)(3) = ' + add(1, 2)(3));
console.log('add(1, 2, 3)(4, 5)(6) = ' + add(1, 2, 3)(4, 5)(6));
/* retains expected state */
let add7 = add(7);
console.log('let add7 = add(7)');
console.log('add7(3) = ' + add7(3));
console.log('add7(8) = ' + add7(8));

之所以需要这两种机制,是因为 add() 的主体必须使用被调用函数的绑定(bind)上下文才能访问中间值 partial application 的总和。 ,并且调用站点必须使用 valueOf() 成员(隐式或显式)才能访问最终总和。

关于Javascript 函数挑战 add(1,2) 和 add(1)(2) 都应返回 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31306312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com