使用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);
c和d看起来是一样的。
有没有其他操作员在R.merge会不会工作的情况下?
答案 0 :(得分:3)
R.merge
的当前实现实际上是R.curry((l, r) => Object.assign({}, l, r))
(尽管在必要时已填充),因此在完全应用时,它的行为与示例中的其余运算符相同。
主要区别在于R.merge
是curry,允许部分应用。在其余运算符(或Object.assign
)不可用的环境中运行时,它也很有用。
因此,如果您不需要部分申请并且其余操作员可以原生使用,那么使用R.merge(a, b)
而不是{...a, ...b}
几乎没有任何好处。
答案 1 :(得分:2)
除了斯科特克里斯托弗的(绝对正确和相关)答案之外,还有另外一种方式,两者不同。 merge
是功能。 {...a, ...b}
是表达式。
Javascript的一个重要特性是函数是一等公民:您可以将它们传递给函数并从函数返回它们。它们可以是变量的值,也可以是对象的属性。表达式也是如此。所以要有一个真正的等价,它将是
之间的一个merge
和
(a, b) => ({...a, ...b})
即便如此,也不能反映斯科特讨论的R.merge
的俗气。
当然这对于一次性表达没有区别,但是当你传递函数时,merge
可能会更清楚地阅读。