2011-05-16 106 views
4

有什麼區別:如果您使用merge!代替merge紅寶石哈希直達VS合併

@attr[:field] = new_value 

@attr.merge(:field => new_value) 
+3

這不是rails專用的,它純粹是ruby afaik – 2011-05-16 14:52:02

+0

是的,所以常常說Rails有時候我忘了什麼是純Ruby,謝謝。 – eMgz 2011-05-16 15:14:13

回答

7

,沒有任何區別。
唯一的區別是您可以在合併參數中使用多個字段(含義:另一個散列)。

例子:

h1 = { "a" => 100, "b" => 200 } 
    h2 = { "b" => 254, "c" => 300 } 
    h3 = h1.merge(h2)  
    puts h1   # => {"a" => 100, "b" => 200} 
    puts h3   # => {"a"=>100, "b"=>254, "c"=>300} 
    h1.merge!(h2) 
    puts h1   # => {"a"=>100, "b"=>254, "c"=>300} 

在分配單值,我寧願h[:field] = new_val超過merge可讀性原因和我想它比合並更快。

您還可以看看哈希的RDoc:http://ruby-doc.org/core/classes/Hash.html#M000759

2

他們做同樣的事情,但是:

@attr[:field] = new_value 

更有效,因爲沒有散穿越是必要的。

0

您可以使用非重合並使用函數式編程風格的哈希。

Ruby的函數式編程有下Don't update variables

不更新哈希

號:

hash = {:a => 1, :b => 2} 
hash[:c] = 3 
hash 

是:

hash = {:a => 1, :b => 2} 
new_hash = hash.merge(:c => 3)