之间有什么区别:
@attr[:field] = new_value
和
@attr.merge(:field => new_value)
答案 0 :(得分:7)
如果您使用merge!
代替merge
,则没有区别
唯一的区别是您可以在合并参数中使用多个字段(意思是:另一个哈希)。
示例:
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
,而我猜它比合并更快。
您还可以查看Hash-rdoc:http://ruby-doc.org/core/classes/Hash.html#M000759
答案 1 :(得分:2)
@attr[:field] = new_value
更有效,因为不需要散列遍历。
答案 2 :(得分:0)
您可以使用非爆炸合并在函数式编程风格中使用散列。
Ruby Functional Programming在Don't update variables
下不要更新哈希
没有
hash = {:a => 1, :b => 2}
hash[:c] = 3
hash
是:
hash = {:a => 1, :b => 2}
new_hash = hash.merge(:c => 3)