我试图将哈希和嵌套哈希转换为对象.
到目前为止,第一个哈希对象由此代码成功转换:
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
Run Code Online (Sandbox Code Playgroud)
但问题是,我还想转换嵌套的哈希对象.但无法成功.
h = Hashit.new({a: '123r', b: {c: 'sdvs'}})
=> #<Hashit:0x00000006516c78 @a="123r", @b={:c=>"sdvs"}>
Run Code Online (Sandbox Code Playgroud)
@b={:c=>"sdvs"}在输出中看到这部分.我也想将它转换为对象.是的,如果是,那怎么样?
我必须模仿 Google API 响应并创建一个可通过.如下方式遍历的 2 级深层数据结构:
=> user.names.first_name
Run Code Online (Sandbox Code Playgroud)
鲍勃
有没有比这更聪明/更好的方法:
user = OpenStruct.new(names: OpenStruct.new(first_name: 'Bob'))
Run Code Online (Sandbox Code Playgroud)