Ramda教程是否有误?R.divide参数顺序疑问
Ramda pipe中divide结果与教程不符的问题
结论
Ramda的divide函数参数顺序从未调整过,是这篇2018年的教程存在错误。
原因分析
Ramda的核心设计是函数优先、数据次之,所有二元运算函数都是「操作数在前,数据在后」的柯里化逻辑:
R.multiply(4)(10)等价于4 * 10R.add(2)(40)等价于2 + 40R.divide(2)(42)等价于2 / 42,这就是你得到0.047619047619047616的原因。
教程中期望得到21(即42 / 2),这需要把数据作为divide的第一个参数,操作数作为第二个参数。要实现这个逻辑,有两种正确写法:
- 使用Ramda的占位符
R.__,明确指定数据的位置:
const mathPipe = R.pipe( R.multiply(4), R.add(2), R.divide(R.__, 2) // 等价于 (x) => x / 2 ); mathPipe(10) // 输出21
- 使用
R.flip翻转divide的参数顺序:
const mathPipe = R.pipe( R.multiply(4), R.add(2), R.flip(R.divide)(2) // 把divide的参数顺序从(a,b)=>a/b改成(b,a)=>b/a ); mathPipe(10) // 输出21
验证Ramda版本兼容性
从Ramda的第一个正式版本(0.1.0)到最新版本,divide的定义始终是(a, b) => a / b,2018年时的Ramda版本也遵循这个规则,不存在参数顺序变更的情况。
内容的提问来源于stack exchange,提问作者musicman
相关产品推荐
相关产品推荐

