Ramda.js R.merge与使用rest运算符组合之间有什么不同吗?
使用R.merge比使用rest操作符进行合成有什么优势吗Ramda.js R.merge与使用rest运算符组合之间有什么不同吗?,ramda.js,Ramda.js,使用R.merge比使用rest操作符进行合成有什么优势吗 const a = {name: 'john', job: 'developer'}; const b = {name: 'peter', commute: 'bike', address: {city: 'San Francisco'}}; const c = {...a, ...b}; console.log('rest', c); const d = R.merge(a, b); console.log('R.merge', d)
const a = {name: 'john', job: 'developer'};
const b = {name: 'peter', commute: 'bike', address: {city: 'San Francisco'}};
const c = {...a, ...b};
console.log('rest', c);
const d = R.merge(a, b);
console.log('R.merge', d);
c和d看起来是一样的
是否存在rest运算符在R.merge将运行时无法运行的情况?当前的
R.merge
实现实际上是R.curry((l,R)=>Object.assign({},l,R))
(尽管在必要时是多填充的),因此在完全应用时,它的行为将与示例中的rest运算符相同
主要区别在于R.merge
是curry,允许部分应用。在rest运算符(或Object.assign
)不可用的环境中操作时,它也很有用
因此,如果您不需要部分应用程序,并且rest操作符本机可用,那么使用R.merge(a,b)
over{…a,…b}
以及Scott Christopher提供的(绝对正确且相关的)答案几乎没有什么好处,这两种方法还有另一个不同之处<代码>合并是一个函数{…a,…b}
是一个表达式
Javascript的一个重要特性是函数是一等公民:您可以将它们传递给函数并从函数返回。它们可以是变量的值,也可以是对象的属性。表达方式则不同。所以要有一个真正的等价,它应该是
merge
及
即使这样,也没有抓住Scott所讨论的R.merge
的俗套本质
当然,这对一次性表达式没有影响,但是当您传递函数时,merge
可能更清晰易读
(a, b) => ({...a, ...b})