【问题标题】:Generalised Curry - Javascript广义咖喱 - Javascript
【发布时间】:2018-11-09 23:34:12
【问题描述】:

在阅读article 关于在 Javascript 中实现通用咖喱时,我偶然发现了这段代码。

function curry(fn) {
  return (...xs) => {
    if (xs.length === 0) {
      throw Error('EMPTY INVOCATION');
    }
    if (xs.length >= fn.length) {
      return fn(...xs);
    }
    return curry(fn.bind(null, ...xs));
  };
}

我无法理解说明中说明的部分

我们创建一个 fn 的副本,其中绑定了前 k 个参数 (部分应用)并将其作为下一个 fn 传递给 curry,其数量减少为 N - k。

fn 的数量在后续调用中如何减少到 N-k?具有 k 个参数的绑定函数应该具有 k 的元数对吗?

【问题讨论】:

  • 绑定函数返回一个带有部分应用参数的函数,所以f(a, b, c)变成f.bind(null, a).bind(null, b)(c)
  • @elclanrs 现在对我来说很有意义。谢谢。
  • 可爱:Function.prototype.length ;它从“永远”就存在了,我之前从未使用过/见过它>_

标签: javascript functional-programming currying function-binding


【解决方案1】:

绑定函数返回带有部分应用参数的函数,因此f(a, b, c) 变为f.bind(null, a).bind(null, b)(c)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    相关资源
    最近更新 更多