我试图通过元编程创建一些getter,但由于某种原因它似乎不起作用。我这样做:
RESOURCES = %w(wood stone gold)
class << self
RESOURCES.each do |resource|
define_method "#{resource}" do
resource
end
end
end
在rails应用程序中,但是在执行时我获得了一个未定义的木头方法。有什么想法吗?
(该代码在Rails“class City&lt; ActiveRecord :: Base”类中)
答案 0 :(得分:1)
您正在定义类方法wood,而不是实例方法。你需要打电话
City.wood
如果你在类之外调用define_method&lt;&lt; self,您将定义实例方法。
class City < Object
RESOURCES = %w(wood stone gold)
RESOURCES.each do |resource|
define_method "#{resource}" do
resource
end
end
end
city = City.new
puts city.wood
答案 1 :(得分:1)
您正在定义类方法,而不是实例方法。
观察尝试时会发生什么:
City.wood
=> "wood"
假设您希望它是一个实例方法:
RESOURCES = %w(wood stone gold)
RESOURCES.each do |resource|
define_method "#{resource}" do
resource
end
end