我四处搜索,但找不到任何内置方法来将对象(我自己创建的)转换为值的散列,因此必须寻找其他地方。
我的想法是使用.instance_variables
,去掉每个变量前面的@
,然后为每个变量使用attr_accessor
创建哈希。
大家怎么看?这是“Ruby 方式”,还是有更好的方式来做到这一点?
最佳答案
假设您希望包含在哈希中的所有数据都存储在实例变量中:
class Foo
attr_writer :a, :b, :c
def to_hash
Hash[*instance_variables.map { |v|
[v.to_sym, instance_variable_get(v)]
}.flatten]
end
end
foo = Foo.new
foo.a = 1
foo.b = "Test"
foo.c = Time.now
foo.to_hash
=> {:b=>"Test", :a=>1, :c=>Fri Jul 09 14:51:47 0200 2010}
关于ruby - 在 Ruby 中将对象转换为值的散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3209525/