1

ich den folgenden Code haben:dynamisch Klasse

module City 
    class Bus < Base 
    end 

    class BusOne < Bus; end 
    class BusTwo < Bus; end 
    class BusSixty < Bus; end 
    .... 
end 

Mein Ziel ist es, diese Klassen dynamisch zu erstellen:

class BusOne < Bus; end 
    class BusTwo < Bus; end 
    class BusSixty < Bus; end 
    ... 

Deshalb habe ich versucht:

module City 
    class Bus < Base 
    DIVISON = [:one, :two, :sixty] 
    end 

    .... 
    Bus::DIVISONS.each do |division| 
    class "Bus#{division.capitalize}".constantize < Bus; end 
    end 
end 

Aber ich bekomme diese Fehlermeldung:

unexpected '<', expecting &. or :: or '[' or '.' (SyntaxError) 

Was ich falsch gemacht? Dank

+0

Ich denke, Ihre Antwort verdient die Greenie. Meins ist nur eine Variante. –

Antwort

0

Dies ist eine Variante der Antwort des John, vor allem die Verwendung von send zu zeigen, ist nicht wesentlich.

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 
1

Arbeiten mit:

City.send(:const_set, "Bus#{division.capitalize}", Class.new(Bus))