【发布时间】:2016-12-01 11:47:37
【问题描述】:
我们有一个attr_accessors 的课程。如:
class Class
attr_accessor :x
attr_accessor :y
...
end
我想从这个类的一个实例创建一个散列。如:
c.to_attr_hash = { :x => "x", :y => "y" }
这是怎么做到的?
【问题讨论】:
标签: ruby oop attributes
我们有一个attr_accessors 的课程。如:
class Class
attr_accessor :x
attr_accessor :y
...
end
我想从这个类的一个实例创建一个散列。如:
c.to_attr_hash = { :x => "x", :y => "y" }
这是怎么做到的?
【问题讨论】:
标签: ruby oop attributes
class Class
attr_accessor :x
attr_accessor :y
def to_attr_hash
hash = Hash.new
instance_variables.each do |v|
hash[v] = instance_variable_get(v)
end
hash
end
end
c = Class.new
c.x = 'a'
c.y = 'b'
p c.to_attr_hash
#=> {:@x=>"a", :@y=>"b"}
【讨论】:
instance_variables.each_with_object({}) { |var, hash| hash[var] = instance_variable_get(var) }
attr_accessors。顺便说一句,像Class这样的猴子补丁核心类只能小心veeeeery,如果真的别无选择。
c = Class.new; c.instance_variable_set(:@i_am_not_an_attr_accessor, 42); c.to_attr_hash,你会发现两个attr_accessor都没有出现,而attr_accessor没有出现 i> 出现。