javascript - 动态柯里化(Currying),以及如何在 JavaScript 变量中同时保存函数和值

标签 javascript currying

<分区>

我正在学习 JavaScript,我最近遇到了一个 practice problem这要求我构建一个可以创建如下输出的函数:

var threeSum= sum(3);
threeSum //3
threeSum(4) //7
threeSum(4)(3) //10
threeSum(4)(3)(7) //17
threeSum(4)(3)(7)()(2) //19
threeSum - 2 //1
threeSum + 2 //5

我假设涉及柯里化(Currying),并且我认为我基本了解柯里化(Currying)如何以简单的形式工作

a=>b=>c=> a+b+c

但我不知道如何创建一个能够处理不确定数量的输入的柯里化(Currying)函数,也不知道如何使它产生一个既可以作为值又可以作为函数的变量。

感谢任何见解!我只需要朝着正确的方向插入——在这一点上,我什至不知道我在寻找什么。

最佳答案

这里的技巧是你需要定义 valueOf ,它允许 javascript 将对象(如函数)解释为值:

var valueAndCallable = function(x) {
    var res = function(a) { return a + x };
    res.valueOf = function() { return x; };
    return res;
};

var v = valueAndCallable(1)
console.log(v);      // function ... -
console.log(+v);     // 1 - calls .valueOf()
console.log(1 + v);  // 2 - calls .valueOf()
console.log(v(3));   // 4

对于柯里化(Currying),您只想让 res() 也返回一个 valueAndCallable

关于javascript - 动态柯里化(Currying),以及如何在 JavaScript 变量中同时保存函数和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37514527/

相关文章:

javascript - 替代 HTML/Javascript 侧边栏小工具?

javascript - Jasmine 规范超时。重置 WebDriver 控制流

Haskell: `Map (a,b) c` 与 `Map a (Map b c)` 对比?

javascript - 什么是 'Currying' ?

scala - Scala 中通用 curried 方法中的类型推断

javascript - http 重定向到特定的 https 链接

javascript - 基于 React 中的调度循环去抖动调用

php - 如何通过 HTML 中的按钮或链接发布到 2 个页面?

javascript - 如何在未知数量的参数上柯里化(Currying)一个函数

lambda - 在方案中使用多个 lambda 是什么意思?