Ruby Modul
Ein Modul ist eine Möglichkeit, Methoden, Klassen und Konstanten zusammenzufassen. Module bieten Ihnen zwei wesentliche Vorteile.
- Module bieten einenNamensraumund vermeiden Namenskonflikte.
- Module implementieren einenMixinMechanismus.
Ein Modul definiert einen Namensraum, der wie eine Sandbox wirkt, in dem Ihre Methoden und Konstanten nicht mit denen anderswo in Konflikt geraten.
Module ähneln Klassen, weisen jedoch die folgenden Unterschiede auf:
- Module können nicht instanziiert werden
- Module haben keine Unterklassen
- Module können nur von einem anderen Modul definiert werden
Syntax
Modulkonstanten werden wie Klassenkonstanten benannt und beginnen mit einem Großbuchstaben. Methodendefinitionen sehen ebenfalls ähnlich aus: Modulmethodendefinitionen ähneln Klassenmethodendefinitionen.
Wie bei Klassenmethoden können Sie eine Modulmethode aufrufen, indem Sie den Modulnamen und einen Punkt vor den Methodennamen setzen, und Sie können auf eine Konstante verweisen, indem Sie den Modulnamen und zwei Doppelpunkte verwenden.
Beispiel
Wir können mehrere Module mit denselben Funktionsnamen, aber unterschiedlicher Funktionalität definieren:
Beispiel
Genau wie Klassenmethoden können Sie, wenn Sie eine Methode in einem Modul definieren, den Modulnamen gefolgt von einem Punkt und dann den Methodennamen angeben.
Ruby require-Anweisung
Die require-Anweisung ähnelt der include-Anweisung in C und C++ und der import-Anweisung in Java. Wenn ein Programm eines Drittanbieters ein beliebiges definiertes Modul verwenden möchte, kann es einfach die Rubyrequire-Anweisung verwenden, um die Moduldatei zu laden:
Syntax
Syntax
Hier ist die Dateiendung.rbnicht erforderlich.
Beispiel
Hier verwenden wir$LOAD_PATH << '.', damit Ruby weiß, dass es das aktuelle Verzeichnis nach der referenzierten Datei durchsuchen muss. Wenn Sie $LOAD_PATH nicht verwenden möchten, können Sierequire_relativeverwenden, um auf eine Datei aus einem relativen Verzeichnis zu verweisen.
Hinweis:Hier enthalten die Dateien dieselben Funktionsnamen. Das würde also zu Mehrdeutigkeit im Code führen, wenn auf das aufrufende Programm verwiesen wird, aber Module vermeiden diese Mehrdeutigkeit, und wir können den Modulnamen verwenden, um die entsprechende Funktion aufzurufen.
Ruby include-Anweisung
Sie können Module in eine Klasse einbetten. Um ein Modul in eine Klasse einzubetten, können Sie dieinclude-Anweisung verwenden:
Syntax
Wenn das Modul in einer separaten Datei definiert ist, müssen Sie dierequire-Anweisung verwenden, um auf die Datei zu verweisen, bevor Sie das Modul einbetten.
Beispiel
Angenommen, das folgende Modul ist in dersupport.rb-Datei geschrieben.
Jetzt können Sie das Modul in einer Klasse wie folgt referenzieren:
Beispiel
Dies erzeugt das folgende Ergebnis:
Sunday You have four weeks in a month You have 52 weeks in a year Sunday 120
Mixins in Ruby
Bevor Sie diesen Abschnitt lesen, benötigen Sie ein grundlegendes Verständnis objektorientierter Konzepte.
Wenn eine Klasse Merkmale von mehr als einer Elternklasse erben kann, spricht man davon, dass die Klasse Mehrfachvererbung aufweist.
Ruby unterstützt Mehrfachvererbung nicht direkt, aber Rubys Module besitzen eine weitere magische Funktion. Sie macht die Notwendigkeit von Mehrfachvererbung nahezu überflüssig und bietet einenMixin-Mechanismus.
Ruby implementiert Mehrfachvererbung nicht tatsächlich, sondern übernimmt stattdessen eine als Mixin bezeichnete Technik als Ersatz. Wenn ein Modul in eine Klassendefinition eingebunden wird, werden die Methoden des Moduls in die Klasse eingemischt.
Schauen wir uns den folgenden Beispielcode an, um mehr über Mixin zu erfahren:
Beispiel
- Modul A besteht aus den Methoden a1 und a2.
- Modul B besteht aus den Methoden b1 und b2.
- Die Klasse Sample enthält die Module A und B.
- Die Klasse Sample kann auf alle vier Methoden zugreifen, nämlich a1, a2, b1 und b2. Daher können Sie sehen, dass die Klasse Sample von zwei Modulen erbt. Man kann sagen, dass die Klasse Sample Mehrfachvererbung verwendet oder Mixin 。