动态创建 class
Dynamically create class
我有以下代码:
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)
我哪里错了?
谢谢
适用于:
City.send(:const_set, "Bus#{division.capitalize}", Class.new(Bus))
这是 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
我有以下代码:
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)
我哪里错了? 谢谢
适用于:
City.send(:const_set, "Bus#{division.capitalize}", Class.new(Bus))
这是 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