首页 > 解决方案 > 如何制作一个curries到第n个整数的ADD函数

问题描述

我怎样才能实现以下?

console.log(Sum(1))          // 1
console.log(Sum(1)(2))       // 3
console.log(Sum(1)(2)(3))    // 6
console.log(Sum(1)(2)(3)(4)) // 10

我试过了,

var add = function(x) {
    return function(y) { return x + y; };
}

但这仅适用于一次潜水。

标签: javascriptcurrying

解决方案


基本上,如果不作为函数调用,则需要返回一个带有toString获取值的方法的函数。

function sum(x) {
    function _(y) { x += y; return _; };
    _.toString = function () { return x; };
    return _;
}

console.log(sum(1))          // 1
console.log(sum(1)(2))       // 3
console.log(sum(1)(2)(3))    // 6
console.log(sum(1)(2)(3)(4)) // 10


推荐阅读