4 Stimmen

Sauberer Weg, um alle Dateien in nicht-Rails Ruby app erfordern?

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:

  1. game_object (und andere Superclassees) in init.rb vor anderen laden.
  2. 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.
  3. 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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X