首页 > 解决方案 > 使用 lodash 对翻转函数进行柯里化 - 有限制吗?

问题描述

我是 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'。我究竟做错了什么?

标签: javascriptfunctional-programminglodash

解决方案


_.map有一个长度属性(参数的数量),_.curry可以用来自动柯里化它,但_.flip(_.map)不能轻易地生成一个与其输入长度相同的新函数(它反转整个参数列表,不仅仅是f => (a, b) => f(b, a))。

> _.map.length
2

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

_.curry允许您指定要解决此问题的参数数量:

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

推荐阅读