【发布时间】:2011-08-26 12:19:15
【问题描述】:
两者有什么区别:
@attr[:field] = new_value
和
@attr.merge(:field => new_value)
【问题讨论】:
-
这不是特定于 rails 的,它是纯 ruby afaik
-
是的,过去常说 Rails,有时我会忘记什么是纯 Ruby,谢谢。
两者有什么区别:
@attr[:field] = new_value
和
@attr.merge(:field => new_value)
【问题讨论】:
如果您使用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
【讨论】:
但是他们做同样的事情:
@attr[:field] = new_value
效率更高,因为不需要哈希遍历。
【讨论】:
您可以使用非爆炸合并以函数式编程风格使用哈希。
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)
【讨论】: