首页 > 解决方案 > 广义咖喱 - Javascript

问题描述

在阅读一篇关于在 Javascript 中实现通用 curry 的文章时,我偶然发现了这段代码。

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。

在随后的调用中,arity 是如何fn减少到 Nk 的?具有 k 个参数的绑定函数应该具有 k 的元数对吗?

标签: javascriptfunctional-programmingcurryingfunction-binding

解决方案


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


推荐阅读