鉴于我有这个散列:
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'
关于ruby - 递归地将 Hash 转换为 OpenStruct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42519557/