lodash.fp.convert.words不符合预期,是否使用方式有误?
你确实用错了lodash.fp的
convert方法 兄弟,问题出在你对lodash/fp里convert方法的定位理解偏了——lodash/fp导出的所有函数本身已经是柯里化、数据后置的FP风格函数了,而convert是专门用来把「普通lodash(非FP版本)的函数」转换成FP风格的工具,你在已经是FP风格的fp.words上调用它,自然达不到预期效果。
咱们拆解下你的代码问题:
正常使用
fp.words的姿势根本不需要convertfp.words本身就是柯里化好的函数,直接写就能满足你“等待剩余字符串参数”的需求:const fp = require('lodash/fp') const assert = require('assert') // 直接用fp.words,天生就是柯里化的 const splitByX = fp.words(/[^x]+/g) assert.equal(typeof splitByX, 'function') // 这里会返回true,完全符合你的预期 // 测试调用的话,splitByX('xxxabcxxxdefxxx') 会返回 ['abc', 'def']你调用
fp.words.convert({ cap: false })到底干了啥?
普通lodash的_.words是数据前置的(比如_.words('hello world')),convert方法是给这类普通函数用的,用来生成FP风格的版本。但fp.words已经是转换完成的FP函数了,你再调用它的convert方法,相当于把已经柯里化的函数又反向处理成了非柯里化的普通函数——所以当你执行words(/[^x]+/g)时,它会直接尝试执行(但缺少目标字符串参数),自然不会返回你想要的等待参数的函数。
如果非要用convert的话,正确的场景是处理普通lodash的函数,比如:
const _ = require('lodash') const fp = require('lodash/fp') // 把普通lodash的words转换成FP风格 const fpWords = fp.convert({ cap: false })(_.words) const splitByX = fpWords(/[^x]+/g) // 此时splitByX就是等待字符串参数的函数
内容的提问来源于stack exchange,提问作者Lokua
相关产品推荐
相关产品推荐

