编写一个curried javascript函数,可以调用任意次数,在最后一次函数调用中返回一个值

m0m*_*eni 5 javascript functional-programming currying

我目前正在处理个人时间的编程问题,要求我创建一个可以这种方式调用的javascript函数.

add(1) // 1
add(1)(2) // 3
add(1)(2)(3); // 6
add(1)(2)(3)(4); // 10
add(1)(2)(3)(4)(5); // 15
Run Code Online (Sandbox Code Playgroud)

我弄清楚的是如何使它在最后一次调用时返回一个值.

例如,为了add(1)(2)工作,那么add(1)必须返回一个函数,但是根据指令add(1)自己调用时会返回1.

我假设你能克服这个问题的一种方法是弄清楚add函数被连续多少次被调用,但我想不出有办法实现这一点.有没有人有任何可以指出我正确方向的提示?

我读过这两篇文章(1,2上的功能柯里),我理解他们,但我不知道怎么做的参数个数可变打交道时钻营.

epa*_*llo 2

也不是不可能,用valueOf()。

function add(initNum) {
    var sum = initNum;
    var callback = function (num) {
        sum += num;
        return callback;
    };
    callback.valueOf = function () {
        return sum;
    };
    return callback;
};
console.log(add(1)(2)==3);            //true
console.log(add(1)(1)+1);             //3
console.log(add(1)(2)(3).valueOf());  //6
Run Code Online (Sandbox Code Playgroud)

  • 正如已经指出的,`===` 会因为类型不匹配而中断。在我看来,这是一个巨大的损失。我会采取明确的而不是隐含的,谢谢。 (3认同)
  • 是的,*不*添加一些特殊的外部调用来终止参数的发送仍然是不可能的。或者说得更清楚一点,原来问题中的API是不可能的。 (2认同)