代码之家  ›  专栏  ›  技术社区  ›  Varun Hegde

通用咖喱-javascript

  •  2
  • Varun Hegde  · 技术社区  · 7 年前

    在阅读 article 在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,其减少的arity为n-k。

    如何计算 fn 在随后的通话中减少到N-K?带k个参数的绑定函数的arity应该是k对吧?

    1 回复  |  直到 7 年前
        1
  •  0
  •   elclanrs    7 年前

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