521 Stimmen

Was ist der Unterschied zwischen include und require in Ruby?

Meine Frage ist ähnlich wie " Was ist der Unterschied zwischen include und extend in Ruby? ".

Was ist der Unterschied zwischen require y include in Ruby? Wenn ich nur die Methoden eines Moduls in meiner Klasse verwenden möchte, sollte ich require es oder include es?

8voto

'Load' - fügt den Inhalt einer Datei ein (Parsen der Datei bei jedem Aufruf)

'Require' - fügt einen geparsten Dateiinhalt ein (Datei wird einmal geparst und im Speicher abgelegt)

'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

7voto

Boris Stitnicky Punkte 12077

Haben Sie jemals versucht require ein Modul? Was waren die Ergebnisse? Versuchen Sie es einfach:

MyModule = Module.new
require MyModule # see what happens

Module können nicht verlangt werden, sie sind nur enthalten!

3voto

Sanket Punkte 165

Einbeziehen Wenn Sie ein Modul wie unten gezeigt in Ihre Klasse einbinden, ist es so, als ob Sie den im Modul definierten Code in die Klasse einfügen, wo Sie ihn "einbinden". Dies ermöglicht das "Mixin"-Verhalten. Es wird verwendet, um Ihren Code zu trocknen, um Duplikation zu vermeiden, zum Beispiel, wenn es mehrere Klassen gibt, die den gleichen Code innerhalb des Moduls benötigen würden.

Laden Die load-Methode ist fast wie die require-Methode, außer dass sie nicht verfolgt, ob die Bibliothek bereits geladen wurde oder nicht. Es ist also möglich, eine Bibliothek mehrfach zu laden, und auch bei Verwendung der Load-Methode müssen Sie die ".rb"-Erweiterung des Bibliotheksdateinamens angeben.

Anfordern Mit der require-Methode können Sie eine Bibliothek laden und verhindern, dass sie mehr als einmal geladen wird. Die require-Methode gibt "false" zurück, wenn Sie versuchen, dieselbe Bibliothek nach dem ersten Mal zu laden. Die require-Methode muss nur verwendet werden, wenn die Bibliothek, die Sie laden wollen, in einer separaten Datei definiert ist, was normalerweise der Fall ist.

Sie können dies bevorzugen http://ionrails.com/2009/09/19/ruby_require-vs-load-vs-include-vs-extend/

3voto

Imran Ahmad Punkte 6774

einbeziehen.

Wenn Sie include ein Modul in Ihren Unterricht einbauen, ist es so, als ob Sie die Code, der im Modul definiert ist, in die Klasse einfügen, wo Sie ihn 'einbinden'. Dies ermöglicht das "Mixin"-Verhalten. Es wird verwendet, um den Code zu trocknen, um Duplizierung zu vermeiden, zum Beispiel, wenn es mehrere Klassen gibt, die denselben Code innerhalb des Moduls benötigen würden.

module Log 
  def class_type
    "This class is of type: #{self.class}"
  end
end

class TestClass 
  include Log 
  # ... 
end

tc = TestClass.new.class_type # -> success
tc = TestClass.class_type # -> error

Fordern Sie an.

Mit der require-Methode können Sie eine Bibliothek laden und verhindern, dass sie mehr als einmal geladen wird. Die require-Methode gibt 'false' zurück, wenn Sie versuchen, die gleiche Bibliothek nach dem ersten Mal zu laden. Die require Methode muss nur verwendet werden, wenn die Bibliothek, die Sie laden wollen, in einer separaten Datei definiert ist, was normalerweise der Fall ist.

Es wird also verfolgt, ob diese Bibliothek bereits geladen wurde oder nicht. Sie müssen auch nicht die ".rb"-Erweiterung des Dateinamens der Bibliothek angeben. Hier ist ein Beispiel für die Verwendung von require. Platzieren Sie die require-Methode ganz oben in Ihrer ".rb"-Datei:

Laden Sie

Die load-Methode ist fast wie die require-Methode, nur dass sie nicht nachverfolgt, ob die Bibliothek geladen wurde oder nicht. Es ist also ist es möglich, eine Bibliothek mehrfach zu laden und auch bei der Verwendung der load Methode müssen Sie die ".rb"-Erweiterung des Dateinamens der Bibliothek angeben.

Erweitern Sie

Wenn Sie die extend-Methode anstelle von include verwenden, fügen Sie die Methoden des Moduls als Klassenmethoden und nicht als Instanzmethoden hinzu.

module Log 
  def class_type
    "This class is of type: #{self.class}"
  end
end

class TestClass 
  extend Log 
  # ... 
end

tc = TestClass.class_type

3voto

Awais Shafqat Punkte 526

Im Folgenden sind einige grundlegende Unterschiede zwischen require und include aufgeführt:

Erfordern:

  1. Require liest die Datei aus dem Dateisystem, parst sie, speichert sie im Speicher und führt sie an einer bestimmten Stelle aus, d.h. wenn Sie etwas ändern, während das Skript läuft, wird diese Änderung nicht berücksichtigt.
  2. Wir verlangen die Datei nach dem Namen, nicht nach dem Modulnamen.
  3. Es wird normalerweise für Bibliotheken und Erweiterungen verwendet.

Einschließen:

  1. Wenn Sie ein Modul in Ihre Klasse einbinden, verhält es sich so, als hätten Sie den in Ihrem Modul definierten Code in Ihre Klasse eingefügt.
  2. Wir fügen den Modulnamen ein, nicht den Dateinamen.
  3. Sie wird in der Regel verwendet, um den Code auszutrocknen und Doppelungen im Code zu entfernen.

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