Ruby on rails 一些getter的简单元编程

Ruby on rails 一些getter的简单元编程,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我试图通过元编程创建一些getter,但由于某些原因,它似乎不起作用。我正在这样做: RESOURCES = %w(wood stone gold) class << self RESOURCES.each do |resource| define_method "#{resource}" do resource end end end RESOURCES=%w(木石金) 类您定义的是类方法,而不是

我试图通过元编程创建一些getter,但由于某些原因,它似乎不起作用。我正在这样做:

RESOURCES = %w(wood stone gold)

class << self
    RESOURCES.each do |resource|
        define_method "#{resource}" do
            resource
        end
    end
end     
RESOURCES=%w(木石金)

类您定义的是类方法,而不是实例方法。你需要打电话

City.wood

如果在类之外调用define_方法,则定义的是类方法,而不是实例方法

观察尝试时发生的情况:

City.wood
=> "wood"
假设您希望它是一个实例方法:

RESOURCES = %w(wood stone gold)

RESOURCES.each do |resource|
    define_method "#{resource}" do
        resource
    end
end

attr\u reader RESOURCES
会很好。define\u方法中实际上有更多的定制,resource只是为了让问题更简单。但由于我使用的是关联,所以它在内部更加复杂。但无论如何,这句话很好。如果可以在这里作为注释来读的话,它实际上是这样的:)define_method“#{resource}”do eval(#{resource}u production_amount“)end别忘了
send
是一种更安全的编码方式。我看不出在你当前的环境中有任何问题,但这是一个好习惯。是的,你是对的,我只是坚持使用eval,因为它只是静态的,与用户无关的内容,但我绝对同意send。
RESOURCES = %w(wood stone gold)

RESOURCES.each do |resource|
    define_method "#{resource}" do
        resource
    end
end