gpt4 book ai didi

ruby - 递归地将 Hash 转换为 OpenStruct

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

鉴于我有这个散列:

 h = { a: 'a', b: 'b', c: { d: 'd', e: 'e'} }

然后我转换为 OpenStruct:

o = OpenStruct.new(h)
=> #<OpenStruct a="a", b="b", c={:d=>"d", :e=>"e"}>
o.a
=> "a"
o.b
=> "b"
o.c
=> {:d=>"d", :e=>"e"}
2.1.2 :006 > o.c.d
NoMethodError: undefined method `d' for {:d=>"d", :e=>"e"}:Hash

我希望所有嵌套的键也都是方法。所以我可以这样访问 d:

o.c.d
=> "d"

我怎样才能做到这一点?

最佳答案

你可以猴子修补 Hash

class Hash
def to_o
JSON.parse to_json, object_class: OpenStruct
end
end

然后你可以说

h = { a: 'a', b: 'b', c: { d: 'd', e: 'e'} }
o = h.to_o
o.c.d # => 'd'

参见 Convert a complex nested hash to an object .

关于ruby - 递归地将 Hash 转换为 OpenStruct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42519557/

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