Ruby on rails 一些getter的简单元编程
我试图通过元编程创建一些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(木石金) 类您定义的是类方法,而不是
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