Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ramda.js R.merge与使用rest运算符组合之间有什么不同吗?_Ramda.js - Fatal编程技术网

Ramda.js 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)

使用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看起来是一样的


是否存在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})