Ist require
idempotent? dh tun
(require 'helm)
und
(require 'helm)
(require 'helm)
mit dem gleichen Ergebnis enden?
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
require
mit dem Feature-Namen als Argument auf.require
Durchsucht die globale Variablefeatures
, 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,require
signalisiert einen Fehler .
Ja, vorausgesetzt , dass der Code in
helm.el
oderhelm.elc
Hinsicht der Regel , dass es nennen müssen(provide 'helm)
. Der Aufruf(provide 'helm)
markiert das Symbolhelm
als geladenes Feature , und dies bewirkt, dass der zweite Aufruf(require 'helm)
nichts tut.Wenn das geladene Paket nicht aufgerufen
provide
wirdrequire
, 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).quelle