我有以下代码:
module City
class Bus < Base
end
class BusOne < Bus; end
class BusTwo < Bus; end
class BusSixty < Bus; end
....
end
我的目标是动态创建此类:
class BusOne < Bus; end
class BusTwo < Bus; end
class BusSixty < Bus; end
...
这就是我尝试的原因:
module City
class Bus < Base
DIVISON = [:one, :two, :sixty]
end
....
Bus::DIVISONS.each do |division|
class "Bus#{division.capitalize}".constantize < Bus; end
end
end
但我收到此错误:
unexpected '<', expecting &. or :: or '[' or '.' (SyntaxError)
我做错了什么? 谢谢
最佳答案
这是 John 答案的变体,主要是为了表明 send
的使用不是必需的。
module City
class Bus
def i_am
puts "this is class #{self.class}"
end
end
end
["BusOne", "BusTwo", "BusSixty"].each do |class_name|
City.const_set(class_name, Class.new(City::Bus))
end
City::BusOne.new.i_am
this is class City::BusOne
City::BusTwo.new.i_am
this is class City::BusTwo
City::BusSixty.new.i_am
this is class City::BusSixty
关于ruby-on-rails - 动态创建类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46570220/