Benötigt die Verwendung mehrere Male für dasselbe Symbol idempotent?

11

Ist requireidempotent? dh tun

(require 'helm)

und

(require 'helm)
(require 'helm)

mit dem gleichen Ergebnis enden?

PythonNut
quelle

Antworten:

14

Ja. Aus benannten Features (Schwerpunkt Mine):

Ein Feature-Name ist ein Symbol, das für eine Sammlung von Funktionen, Variablen usw. steht. Die Datei, die sie definiert, sollte das Feature bereitstellen. Ein anderes Programm, das sie verwendet, kann sicherstellen, dass sie definiert sind, indem es die Funktion benötigt. Dadurch wird die Definitionsdatei geladen, sofern sie noch nicht geladen wurde.

Um das Vorhandensein eines Features zu erfordern, rufen Sie requiremit dem Feature-Namen als Argument auf. requireDurchsucht die globale Variable features, um festzustellen, ob das gewünschte Feature bereits bereitgestellt wurde. Wenn nicht, wird das Feature aus der entsprechenden Datei geladen . Diese Datei sollteprovide auf der obersten Ebene aufgerufen werden, um die Funktion hinzuzufügenfeatures . wenn es dies nicht tut, requiresignalisiert einen Fehler .

Mondhorn
quelle
Akzeptiert zum Zitieren der Dokumente.
PythonNut
Bitte fügen Sie die Informationen aus Gilles 'Antwort hier ein. Oder, @Gilles, diese Antwort in Ihre zu schreiben, würde auch funktionieren.
Daveloyall
13

Ja, vorausgesetzt , dass der Code in helm.eloder helm.elcHinsicht der Regel , dass es nennen müssen (provide 'helm). Der Aufruf (provide 'helm)markiert das Symbol helmals geladenes Feature , und dies bewirkt, dass der zweite Aufruf (require 'helm)nichts tut.

Wenn das geladene Paket nicht aufgerufen providewird require, wird ein Fehler gemeldet, und die Funktion wird nicht als geladen markiert. Bei einem zweiten Aufruf (require 'helm)würde das Laden erneut versucht (und aus demselben Grund in der Regel erneut fehlschlagen).

Gilles 'SO - hör auf böse zu sein'
quelle
+1 Danke für die extra Info. Es löste meine Verwirrung, nachdem ich die Dokumente gelesen hatte.
PythonNut