我一直在试图找出如何更有力地编写这个ruby代码有人有更好的解决方案吗?

a[:new] = {} if a[:new].nil?
a[:new].merge!( { new_key => new_value } )

有没有更优雅的方式来写这个?在处理嵌套哈希时,我遇到了很多问题,需要检查密钥是否存在,如果没有,创建它。

最佳答案

Hash#to_hNilClass#to_h的帮助下按如下方式编写

a[:new] = a[:new].to_h.merge( { new_key => new_value } )

例子:
hsh1[:a] # => nil
hsh1[:a] = hsh1[:a].to_h.merge({1=>2})
hsh1[:a] # => {1=>2}

hsh2 = {:a => {'k' => 2}}
hsh2[:a] # => {"k"=>2}
hsh2[:a] = hsh2[:a].to_h.merge({1=>2})
hsh2 # => {:a=>{"k"=>2, 1=>2}}

10-08 04:23