gpt4 book ai didi

ruby - 使用 Hash#dig 或 Lonely operator(&.) 安全地为嵌套哈希赋值

转载 作者:数据小太阳 更新时间:2023-10-29 06:34:44 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com