Ruby哈希直接访问vs合并

eMg*_*Mgz 5 ruby hash merge

之间有什么区别:

@attr[:field] = new_value
Run Code Online (Sandbox Code Playgroud)

@attr.merge(:field => new_value)
Run Code Online (Sandbox Code Playgroud)

Sim*_*ker 8

如果您使用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}
Run Code Online (Sandbox Code Playgroud)

当指定单个值,我宁愿h[:field] = new_valmerge可读性原因和我猜它比合并更快.

您还可以查看Hash-rdoc:http: //ruby-doc.org/core/classes/Hash.html#M000759