Ruby Modul (Modul)
Modul (Modul) ist eine Möglichkeit, Methoden, Klassen und Konstanten kombiniert Art und Weise. Module (Module) bietet Ihnen zwei Vorteile.
- Module bieten einenNamensraumund verhindern Namenskonflikte.
- Modul implementiertmixinGeräte.
Modul (Modul) definiert einen Namespace, das entspricht einer Sandbox, Ihre Methoden und Konstanten sind keine Konstanten und Methoden der Konflikt an anderer Stelle in sie.
Modul ähnliche Klasse, aber mit einem anderen Blick:
- Die Module können nicht instanziiert werden
- Modul nicht Subklassen
- Modul kann nur von einem anderen Modul definiert werden,
Grammatik
module Identifier statement1 statement2 ........... end
Modul mit dem Namen Konstanten und Klassenkonstanten ähnlich benannten, mit einem Großbuchstaben beginnen. Methodendefinition sieht so aus: ähnliche modulare Ansatz die Klassenmethodendefinitionen zu definieren.
Durch die Klassenmethoden können Sie den Modulnamen und einen Punkt vor dem Klassennamen des Verfahrens stellen Sie den modularen Ansatz zu nennen, können Sie den Namen des Moduls und zwei Doppelpunkte verwenden, um eine Konstante zu verweisen.
Beispiele
#!/usr/bin/ruby # 定义在 trig.rb 文件中的模块 module Trig PI = 3.141592654 def Trig.sin(x) # .. end def Trig.cos(x) # .. end end
Wir können mehrere Funktionen mit dem gleichen Namen, aber unterschiedlichen Funktionsmodule definieren:
#!/usr/bin/ruby # 定义在 moral.rb 文件中的模块 module Moral VERY_BAD = 0 BAD = 1 def Moral.sin(badness) # ... end end
Wie Klassenmethoden, wenn Sie eine Methode in einem Modul definiert haben, können Sie den Modulnamen gefolgt von einem Punkt festlegen, nach Punkt nach dem Methodennamen gefolgt.
Rubinbenötigen Aussage
erfordern Anweisung C und C ++, und beinhalten Aussagen in der Java-Import-Anweisung ähnlich ist. Wenn ein Drittanbieter - Programm , das Sie eines der Module verwendet werden soll definiert sind, können Sie einfachRubyverwenden Anweisung benötigen Moduldatei zu laden:
Grammatik
require filename
Hier.RB die Dateierweiterung nicht erforderlich.
Beispiele
$ LOAD_PATH << '.' require 'trig.rb' erfordern "moralischen" y = Trig.sin (Trig :: PI / 4) Fehlverhalten = Moral.sin (Moral :: very_bad)
Hier verwenden wir$ LOAD_PATH << '.' Let Rubin wissen , dass wir für die referenzierte Datei im aktuellen Verzeichnis suchen müssen.Wenn Sie nicht wollen , $ LOAD_PATH verwenden, können Sierequire_relative verwenden , um eine Datei von einem relativen Verzeichnis zu verweisen.
Hinweis: Hier enthält die Datei die gleiche Funktion Namen.So wird dies zu Verschleierung führen, wenn an das rufende Programm bezieht, sondern Module vermeiden diesen Code-Verschleierung, und wir können den Namen des Moduls verwenden Sie die entsprechende Funktion aufzurufen.
Ruby- Include - Anweisung
Sie können ein Modul in einer Klasse einbetten. Um im Klassenmodul einzubetten, können Sieumfassenauch Aussagen in Ihrer Klasse verwenden:
Grammatik
include modulename
Wenn das Modul in einer separaten Datei definiert ist, also , bevor Sie eingebettete Modul verwenden müssen Aussagenerfordernverweisen auf die Datei.
Beispiele
Unter der Annahme , die folgenden Module insupport.rbDatei geschrieben.
module Week FIRST_DAY = "Sunday" def Week.weeks_in_month puts "You have four weeks in a month" end def Week.weeks_in_year puts "You have 52 weeks in a year" end end
Sie können nun das Modul in der Klasse verweisen, wie folgt:
#!/usr/bin/ruby $LOAD_PATH << '.' require "support" class Decade include Week no_of_yrs=10 def no_of_months puts Week::FIRST_DAY number=10*12 puts number end end d1=Decade.new puts Week::FIRST_DAY Week.weeks_in_month Week.weeks_in_year d1.no_of_months
Daraus ergeben sich die folgenden Ergebnisse:
Sunday You have four weeks in a month You have 52 weeks in a year Sunday 120
Rubin in Mixins
Bevor Sie diesen Abschnitt lesen, benötigen Sie ein vorläufiges Verständnis der objektorientierten Konzepte.
Wenn eine Klasse mehr als eine Elternklasse sein, wenn die Feature-Class von erbt, ist die Klasse, die als Mehrfachvererbung angezeigt.
Rubin nicht direkt Mehrfachvererbung unterstützen, aber Ruby Modul (Modul) hat eine weitere fantastische Funktionen. Es beseitigt praktisch die Notwendigkeit für mehrfache Vererbung, ist eine Vorrichtung vorgesehen , umeine mixin genannt.
Rubin nicht wirklich mehrere Vererbungsmechanismus zu erreichen, sondern als mixin Technologie als Ersatz angenommen. Die Module umfassen die Klassendefinition, Konzept das Modul in die Klasse zu mischen.
Schauen wir uns die folgenden Beispielcode aussehen, in ein tiefes Verständnis von mixin:
module A def a1 end def a2 end end module B def b1 end def b2 end end class Sample include A include B def s1 end end samp=Sample.new samp.a1 samp.a2 samp.b1 samp.b2 samp.s1
- Ein Modul wird nach dem Verfahren von a1 und a2 besteht.
- Modul B durch die Methode der Zusammensetzung B1 und B2.
- Sample-Klasse enthält Module A und B.
- Sample-Klasse können alle vier Methoden zugreifen, nämlich a1, a2, b1 und b2.