Um wiederverwendbare Komponenten zu erstellen, die leicht in anderen Programmen verwendet werden können, muss eine Programmiersprache die Möglichkeit haben, diesen Code zur Laufzeit reibungslos zu importieren. In Ruby ist die benötigen Methode wird verwendet, um eine andere Datei zu laden und alle ihre Anweisungen auszuführen. Dies dient dazu, alle Klassen- und Methodendefinitionen in die Datei zu importieren. Die Methode require führt nicht nur alle Anweisungen in der Datei aus, sondern verfolgt auch, welche Dateien zuvor benötigt wurden, und benötigt daher keine Datei zweimal.
Die Methode require verwendet den Namen der zu fordernden Datei als Zeichenfolge als einzelnes Argument. Dies kann entweder ein Pfad zur Datei sein, wie z ./lib/some_library.rb oder ein verkürzter Name, wie z irgendeine_Bibliothek. Wenn das Argument ein Pfad und ein vollständiger Dateiname ist, sucht die Methode require dort nach der Datei. Wenn das Argument jedoch ein verkürzter Name ist, durchsucht die Methode require eine Reihe vordefinierter Verzeichnisse auf Ihrem System nach dieser Datei. Die Verwendung des abgekürzten Namens ist die am häufigsten verwendete Methode.
Das folgende Beispiel zeigt, wie die require-Anweisung verwendet wird. Die Datei test_library.rb ist im ersten Codeblock. Diese Datei druckt eine Nachricht und definiert eine neue Klasse. Der zweite Codeblock ist die Datei test_program.rb. Diese Datei lädt die test_library.rb Datei mit derbenötigenMethode und erstellt eine neue TestClass Objekt.
Setzt "test_library included"
Klasse TestClass
def initialisieren
Setzt "TestClass Objekt erstellt"
Ende
Ende
#! / usr / bin / env ruby
Benötige 'test_library.rb'
t = TestClass.new
Beim Schreiben von wiederverwendbaren Komponenten ist es am besten, nicht viele Variablen im globalen Bereich außerhalb von Klassen oder Methoden zu deklarieren oder die zu verwenden $ Präfix. Dies soll eine so genannte "Namespace-Verschmutzung" verhindern. Wenn Sie zu viele Namen deklarieren, deklariert möglicherweise ein anderes Programm oder eine andere Bibliothek denselben Namen und verursacht einen Namenskonflikt. Wenn zwei völlig unabhängige Bibliotheken versehentlich anfangen, die Variablen des anderen zu ändern, werden die Dinge kaputt gehen - scheinbar nach dem Zufallsprinzip. Dies ist ein sehr schwieriger Fehler, den man am besten ausfindig machen sollte, um ihn zu vermeiden.
Um Namenskonflikte zu vermeiden, können Sie alles in Ihrer Bibliothek in eine Modulanweisung einschließen. Dazu müssen die Benutzer mit einem vollständig qualifizierten Namen wie z. B. auf Ihre Klassen und Methoden verweisen MyLibrary :: my_method, Aber es lohnt sich, da es im Allgemeinen nicht zu Namenskonflikten kommt. Benutzer, die alle Klassen- und Methodennamen im globalen Bereich haben möchten, können dies mit dem Befehl tun umfassen Erklärung.
Das folgende Beispiel wiederholt das vorherige Beispiel, schließt jedoch alles in ein Meine Bibliothek Modul. Zwei Versionen von my_program.rb sind gegeben; eine, die die verwendet umfassen Aussage und eine, die nicht.
Setzt "test_library included"
Modul MyLibrary
Klasse TestClass
def initialisieren
Setzt "TestClass Objekt erstellt"
Ende
Ende
Ende
#! / usr / bin / env ruby
Benötige 'test_library2.rb'
t = MyLibrary :: TestClass.new
#! / usr / bin / env ruby
Benötige 'test_library2.rb'
MyLibrary einbinden
t = TestClass.new
Da wiederverwendbare Komponenten häufig verschoben werden, ist es auch am besten, in Ihren erforderlichen Aufrufen keine absoluten Pfade zu verwenden. Ein absoluter Pfad ist ein Pfad wie /home/user/code/library.rb. Sie werden feststellen, dass sich die Datei genau an diesem Ort befinden muss, damit sie funktioniert. Wenn das Skript jemals verschoben wird oder sich Ihr Ausgangsverzeichnis ändert, funktioniert diese Anweisung nicht mehr.
Anstelle von absoluten Pfaden wird häufig ein ./ lib Verzeichnis im Verzeichnis Ihres Ruby-Programms. Das ./ lib Das Verzeichnis wird zum Verzeichnis hinzugefügt $ LOAD_PATH Variable, die die Verzeichnisse speichert, in denen die Methode require nach Ruby-Dateien sucht. Danach, wenn die Datei my_library.rb im lib-verzeichnis gespeichert ist, kann es mit einem einfachen in ihr programm geladen werden Benötige 'my_library' Erklärung.
Das folgende Beispiel ist das gleiche wie das vorherige test_program.rb Beispiele. Es wird jedoch davon ausgegangen, dass test_library.rb Datei wird in der gespeichert ./ lib Verzeichnis und lädt es mit der oben beschriebenen Methode.
#! / usr / bin / env ruby
$ LOAD_PATH << './lib'
Benötige 'test_library.rb'
t = TestClass.new