gpt4 book ai didi

Ruby:将嵌套哈希转换为对象?

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

我正在尝试将包含嵌套哈希的哈希转换为对象,以便可以使用点语法访问属性(包括嵌套属性)。

到目前为止,第一个哈希对象已通过此代码成功转换:

class Hashit
def initialize(hash)
hash.each do |k,v|
self.instance_variable_set("@#{k}", v)
self.class.send(:define_method, k, proc{self.instance_variable_get("@#{k}")})
self.class.send(:define_method, "#{k}=", proc{|v| self.instance_variable_set("@#{k}", v)})
end
end
end

问题是,这种方法不适用于嵌套哈希:

h = Hashit.new({a: '123r', b: {c: 'sdvs'}})
=> #<Hashit:0x00000006516c78 @a="123r", @b={:c=>"sdvs"}>

请注意,在输出中,@b={:c=>"sdvs"} 没有被转换;它仍然是一个散列。

如何将嵌套哈希转换为对象?

最佳答案

您可以使用 OpenStruct http://ruby-doc.org/stdlib-2.0.0/libdoc/ostruct/rdoc/OpenStruct.html

user = OpenStruct.new({name: "Jimmy Cool", age: "25"})
user.name #Jimmy Cool
user.age #25

关于Ruby:将嵌套哈希转换为对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26809848/

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