javascript - 使用 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'。我究竟做错了什么?
解决方案
_.map
有一个长度属性(参数的数量),_.curry
可以用来自动柯里化它,但_.flip(_.map)
不能轻易地生成一个与其输入长度相同的新函数(它反转整个参数列表,不仅仅是f => (a, b) => f(b, a)
)。
> _.map.length
2
> _.flip(_.map).length
0
_.curry
允许您指定要解决此问题的参数数量:
const curriedFlippedMap = _.curry(flippedMap, 2);
推荐阅读
- html - VBA IE与大表单交互
- sql - laravel 使用控制器向数据库添加和删除列
- php - 如果有混合类型数组,如何为 IN 子句准备语句?
- php - phalcon模型必须同时修改mysql列的变化
- c# - Unity 3D C# 检查列表中的 Vector3
- python - Python - 子流程 - 记录和转储测量值
- java - 无法使用 python 请求模块发送“multipart/form-data”请求
- javascript - 如何防止点击刚刚显示的元素
- sqlite - 缺少方法异常 Xamarin
- stripe-payments - 使用金额和货币等 null 属性对 source.chargeable 事件进行条带化