Каррирование перевернутой функции с использованием lodash - есть ли ограничения? - PullRequest
0 голосов
/ 05 мая 2019

Я новичок в lodash и просто играю с ним, чтобы стать знакомым.Я пытаюсь карри перевернутой функции, и я получаю ошибку TypeError.

Каррирование той же функции «без переворота» работает, как ожидалось.

const curriedMap = _.curry(_.map);
const squares1 = curriedMap([ 1, 2, 3, 4 ]);

console.log(squares1(x => x * x)); // [ 1, 4, 9, 16 ]


const flippedMap = _.flip(_.map);

console.log(flippedMap(x => x * x, [1, 2, 3, 4])); // [ 1, 4, 9, 16 ]

const curriedFlippedMap = _.curry(flippedMap);

const makeSquares = curriedFlippedMap(x => x * x);

console.log(makeSquares([1, 2, 3, 4])); // TypeError: makeSquares is not a function

Я ожидаю последнюю строкупроизвести [ 1, 4, 9, 16 ], но вместо этого я получаю 'TypeError'.Что я делаю не так?

1 Ответ

1 голос
/ 05 мая 2019

_.map имеет свойство длины (количество параметров), которое _.curry может использовать для автоматического его каррирования, но _.flip(_.map) не может легко создать новую функцию с той же длиной, что и ее вход (она обращает всесписок аргументов, это не просто f => (a, b) => f(b, a)).

> _.map.length
2

> _.flip(_.map).length
0

_.curry позволяет указать количество параметров , чтобы обойти это:

const curriedFlippedMap = _.curry(flippedMap, 2);
...