Ich versuche, ein Spiel in Ruby (nicht Rails) zu schreiben, um es mir besser beibringen zu können. (Das heißt, ich würde das gerne richtig machen, aber wenn ich versuche, etwas in Ruby einzubauen, das einfach nicht funktioniert, werde ich die Sprache wechseln). Ich habe ein Problem mit der require-Reihenfolge und frage mich, ob es einen sauberen Weg gibt, das Folgende zu tun.
Hier ist meine bisherige Struktur:
game
Gemfile
src
models
character.rb
game_object.rb
init.rb
Anstatt jede Datei einzeln aufzulisten, benötigt init.rb Dateien wie diese:
Dir['./src/**/*.rb'].each do |app|
require app
end
game_object.rb ist so weit sehr einfach, aber character.rb sieht so aus:
module Game
class Character < Game::GameObject
attr_accessor :name
def initialize(name)
@name = name
end
end
end
Wenn ich das tue, erhalte ich leider die Meldung "uninitialized constant Game::GameObject (NameError)", es sei denn, ich fordere game_object ausdrücklich vor anderen Dateien an.
Mir scheint, dass ich hier mehrere Möglichkeiten habe:
- game_object (und andere Superclassees) in init.rb vor anderen laden.
- Require game_object in character.rb, was problematisch zu sein scheint, denn je nachdem, welchen Pfad ich verwende, ist mein Verständnis, dass es die Datei mehrmals laden kann.
- Ich lade jede Datei einzeln und verwalte die Reihenfolge vollständig manuell, so dass ich die volle Kontrolle habe.
Das scheint alles komplizierter zu sein, als es sein sollte. Gibt es einen saubereren Weg?