2017-12-06 4 views
0

残りの演算子でR.mergeを使用する利点はありますか?R.mergeと残りの演算子との間に何か違いはありますか?

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の実行中に残りの演算子が動作しないケースはありますか?

答えて

2

R.mergeの現在の実装は、効果的にR.curry((l, r) => Object.assign({}, l, r))です(必要に応じてポリフィルされていますが)。したがって、完全に適用されると、例の残りの演算子と同じように動作します。

R.mergeが部分的に適用されることが主な違いです。また、残りの演算子(またはObject.assign)が使用できない環境で操作する場合にも役立ちます。

部分的な適用を必要とせず、残りの演算子をネイティブで利用できる場合、R.merge(a, b){...a, ...b}以上に使用する利点はほとんどありません。

1

スコット・クリストファーからの(まったく正しい、適切な)答えと同様、2つの違いもある別の方法もあります。 mergeは、ファンクションです。 {...a, ...b}の式です。

Javascriptの重要な機能の1つは、関数がファーストクラスの市民であることです。関数に渡して関数から返すことができます。変数の値、またはオブジェクトのプロパティにすることができます。同じことは表現には当てはまりません。だから、本当の等価性を持っている、それはスコットが議論R.mergeのカリー本質を捉えていない

merge 

(a, b) => {...a, ...b} 

とにも

間のものであろう。

もちろん、これは1回限りの式では違いはありませんが、関数を渡すときにはmergeが読みやすくなります。

関連する問題