我试图从哈希(与嵌套哈希)生成attr_reader,以便它自动镜像instance_variable创建。Ruby:动态生成attribute_accessor
这里是我到目前为止有:
data = {:@datetime => '2011-11-23', :@duration => '90', :@class => {:@price => '£7', :@level => 'all'}}
class Event
#attr_reader :datetime, :duration, :class, :price, :level
def init(data, recursion)
data.each do |name, value|
if value.is_a? Hash
init(value, recursion+1)
else
instance_variable_set(name, value)
#bit missing: attr_accessor name.to_sym
end
end
end
但我不能找到一个办法做到这一点:(
你是我的新朋友!!!!这只是工作,是如此简单...红宝石是魔术:)而你是一个明星:)(我很高兴,因为我看了一会儿) –
只是一个简单的问题更多,是否有任何方式预先命名包含散列的访问者名称,以便我可以调用my_class.class.price,或类似的东西? –
首先,'class'是一个保留关键字,不要使用它。你在这里评论中的第二个问题超出了这个特定问题的范围。你可能想开始一个新的问题,因为它处理递归等,而不是属性访问器。 (PS,不要忘记接受最好的答案) – rdvdijk