Обобщенный карри - Javascript - PullRequest
0 голосов
/ 31 мая 2018

Читая статью о реализации обобщенного карри в 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 с уменьшенной арностью N - k.

Как арность fn уменьшается до Nk в последующих вызовах?Связанная функция с k аргументами должна иметь арность k, верно?

1 Ответ

0 голосов
/ 31 мая 2018

Связанная функция возвращает функцию с частично примененными аргументами, поэтому f(a, b, c) становится f.bind(null, a).bind(null, b)(c).

...