广义咖喱 - Javascript

时间:2018-05-31 03:10:48

标签: javascript functional-programming currying function-binding

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

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,其减少的N - k。

fn的arity在后续调用中如何降低到N-k?带有k个参数的绑定函数应该具有k的权限吗?

1 个答案:

答案 0 :(得分:0)

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