Meine Frage ähnelt " Was ist der Unterschied zwischen Einschließen und Erweitern in Ruby? ".
Was ist der Unterschied zwischen require
und include
in Ruby? Wenn ich nur die Methoden eines Moduls in meiner Klasse verwenden möchte, sollte ich require
es oder include
es?
require
undinclude
, und auch relevant ,Module#append_features
.Antworten:
Quelle
Wenn Sie also nur ein Modul verwenden möchten, anstatt es zu erweitern oder ein Mix-In durchzuführen, sollten Sie es verwenden
require
.Seltsamerweise ist Ruby's
require
analog zu C'sinclude
, während Ruby'sinclude
fast nichts mit C's zu tun hatinclude
.quelle
include
In Ruby ist einfach Vererbung.class C; include M end
machtM
die Oberklasse vonC
und die (frühere) OberklasseC
der Oberklasse vonM
. Ich denke nicht, dass Csinclude
durch Vererbung funktioniert, ich denke, es ist eine einfache textuelle / lexikalische Substitution.Wenn Sie ein Modul verwenden, bedeutet dies, dass Sie alle Methoden in Ihre Klasse bringen. Wenn Sie
extend
eine Klasse mit einem Modul haben, bedeutet dies, dass Sie die Methoden des Moduls als Klasse "einbringen" . Wenn Sieinclude
eine Klasse mit einem Modul haben, bedeutet dies, dass Sie die Methoden des Moduls als Instanzmethoden "einbringen" .EX:
B.say
=> undefinierte Methode 'say' für B: ClassB.new.say
=> das ist Modul A.C.say
=> das ist Modul A.C.new.say
=> undefinierte Methode 'say' für C: Classquelle
require
und sindinclude
sind.Aus dem Metaprogramming Ruby-Buch,
quelle
Ruby
require
ist eher wie "include" in anderen Sprachen (wie C). Es teilt Ruby mit, dass Sie den Inhalt einer anderen Datei einbringen möchten . Ähnliche Mechanismen in anderen Sprachen sind:using <namespace>
Direktive in C # .import <package>
in Java .Ruby
include
ist ein objektorientierter Vererbungsmechanismus, der für Mixins verwendet wird .Es gibt eine gute Erklärung hier :
Betonung hinzugefügt.
quelle
Haben Sie jemals versucht,
require
ein Modul? Was waren die Ergebnisse? Probiere es einfach:Module können nicht benötigt werden, nur enthalten!
quelle
TypeError
) erhält, wenn das WortModule
in geändert wirdClass
.Aus der Programmierung von Ruby 1.9
quelle
Einschließen Wenn Sie ein Modul wie unten gezeigt in Ihre Klasse aufnehmen, ist es so, als hätten Sie den im Modul definierten Code genommen und in die Klasse eingefügt, wo Sie ihn 'einschließen'. Es erlaubt das 'Mixin'-Verhalten. Es wird verwendet, um Ihren Code auszutrocknen, um Doppelarbeit zu vermeiden, beispielsweise wenn es mehrere Klassen gibt, die denselben Code innerhalb des Moduls benötigen.
Laden Die Lademethode ähnelt fast der Require-Methode, verfolgt jedoch nicht, ob diese Bibliothek geladen wurde oder nicht. Es ist also möglich, eine Bibliothek mehrmals zu laden. Wenn Sie die Lademethode verwenden, müssen Sie die Erweiterung „.rb“ des Bibliotheksdateinamens angeben.
Erforderlich Mit der Methode require können Sie eine Bibliothek laden und verhindern, dass sie mehrmals geladen wird. Die require-Methode gibt 'false' zurück, wenn Sie versuchen, dieselbe Bibliothek nach dem ersten Mal zu laden. Die Methode require muss nur verwendet werden, wenn die von Ihnen geladene Bibliothek in einer separaten Datei definiert ist. Dies ist normalerweise der Fall.
Sie können dies bevorzugen http://ionrails.com/2009/09/19/ruby_require-vs-load-vs-include-vs-extend/
quelle
Im Folgenden sind einige grundlegende Unterschiede zwischen erforderlich und enthalten aufgeführt:
Benötigen:
Umfassen:
quelle
Es wird bolean true / false zurückgeben
Der Name, der als Parameter an require, ruby übergeben wird, versucht, die Quelldatei mit diesem Namen in Ihrem Ladepfad zu finden. Die require-Methode gibt 'false' zurück, wenn Sie versuchen, dieselbe Bibliothek nach dem ersten Mal zu laden. Die Methode require muss nur verwendet werden, wenn die zu ladende Bibliothek in einer separaten Datei definiert ist. So wird nachverfolgt, ob diese Bibliothek bereits geladen wurde oder nicht.
Angenommen, Sie haben einige Methoden, die Sie in zwei verschiedenen Klassen haben müssen. Dann müssen Sie sie nicht in beiden Klassen schreiben. Stattdessen können Sie es im Modul definieren. Und dann dieses Modul in andere Klassen aufnehmen. Es wird von Ruby bereitgestellt, um das DRY-Prinzip sicherzustellen. Es wird verwendet, um Ihren Code auszutrocknen, um Doppelarbeit zu vermeiden
quelle
Umfassen
Benötigen
So wird nachverfolgt, ob diese Bibliothek bereits geladen wurde oder nicht. Sie müssen auch nicht die Erweiterung ".rb" des Bibliotheksdateinamens angeben. Hier ist ein Beispiel für die Verwendung von require. Platzieren Sie die Methode require ganz oben in Ihrer ".rb" -Datei:
Belastung
Erweitern
quelle
'Laden' - fügt den Inhalt einer Datei ein. (Analysiert die Datei jedes Mal, wenn die Datei aufgerufen wird.)
'Erforderlich' - fügt einen analysierten Dateiinhalt ein (Datei einmal analysiert und im Speicher gespeichert)
'Include' - schließt das Modul in die Klasse ein und kann Methoden innerhalb des Moduls als Instanzmethode der Klasse verwenden
'Erweitern' - schließt das Modul in die Klasse ein und kann Methoden innerhalb des Moduls als Klassenmethode verwenden
quelle