h = {
data: {
user: {
value: "John Doe"
}
}
}
要为嵌套哈希赋值,我们可以使用
h[:data][:user][:value] = "Bob"
但是如果中间的任何部分缺失,就会导致错误。
有点像
h.dig(:data, :user, :value) = "Bob"
不会工作,因为还没有可用的 Hash#dig=
。
要安全地赋值,我们可以做
h.dig(:data, :user)&.[]=(:value, "Bob") # or equivalently
h.dig(:data, :user)&.store(:value, "Bob")
但是有更好的方法吗?
最佳答案
它并非没有警告(如果您从其他地方接收哈希则不起作用),但一个常见的解决方案是:
hash = Hash.new {|h,k| h[k] = h.class.new(&h.default_proc) }
hash[:data][:user][:value] = "Bob"
p hash
# => { :data => { :user => { :value => "Bob" } } }
关于ruby - 使用 Hash#dig 或 Lonely operator(&.) 安全地为嵌套哈希赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34620469/