You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

lodash.fp.convert.words不符合预期,是否使用方式有误?

你确实用错了lodash.fp的convert方法

兄弟,问题出在你对lodash/fp里convert方法的定位理解偏了——lodash/fp导出的所有函数本身已经是柯里化、数据后置的FP风格函数了,而convert是专门用来把「普通lodash(非FP版本)的函数」转换成FP风格的工具,你在已经是FP风格的fp.words上调用它,自然达不到预期效果。

咱们拆解下你的代码问题:

  1. 正常使用fp.words的姿势根本不需要convert
    fp.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']
    
  2. 你调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:21:12