Soweit ich require
weiß , wird es verwendet, um große Codestücke (so etwas wie Module) zu laden, obwohl es auch einzelne Funktionen laden kann.
Autoload hingegen registriert nur Funktionen und verschiebt das Laden auf die Ausführungszeit.
Ich habe kürzlich einen Artikel gelesen, in dem die autoload
ausschließliche Verwendung von befürwortet wird .
Ist es besser zu autoload
als zu require
? Was sind einige typische Anwendungsfälle für diese?
autoload
undrequire
aus dieser Frage entfernt haben. Das Hinzufügen eines Tagslibraries
war in Ordnung, aber jetzt kann jeder, der nach Fragen zu diesem Tag suchtautoload
oderrequire
ihn nicht findet , ihn mithilfe von Tags verwenden . Das sind beide wichtige Emacs-Lisp-Funktionen, nach denen die Leute suchen werden. Schade. Und denken Sie darüber nach, wie hilfreichelisp
undlibraries
(besonderselisp
) praktisch eine Emacs-Site sein wird: Ich fürchte, in Emacsland gibt es kaum Unterschiede. (Aber nein, ich bin nicht dagegen, sie zu haben und zu benutzen.)autoload
undrequire
ich denke, dass diese Tags gerechtfertigt sind. Tatsächlich ist die Bezeichnung dieser Frage [nur] mitlibraries
übermäßig verallgemeinernd. Ich verwende zum einenrequire
, um das Laden von "my-foobar-cfg" auszulösen, das, wie der Name schon sagt, nur meine Konfiguration enthält, keine Bibliothek.Antworten:
autoload
ist kein Ersatz fürrequire
. In der Regelrequire
wird verwendet, um sicherzustellen, dass eine bestimmte Datei geladen ist.autoload
Andererseits gibt Emacs einen Hinweis, in welcher Datei eine bestimmte Funktion zu finden ist, ohne die Datei sofort zu laden. Erst beim Aufruf der Funktion Autoloaded wird die entsprechende Datei geladen.Grundsätzlich
autoload
können Sie das Laden einer ganzen Datei auf den Zeitpunkt verschieben, an dem Sie sie tatsächlich benötigen. Aus diesem Grund definieren (besonders große) Pakete ihre Eingabefunktionen normalerweise alsautoload
s.Wenn Sie umfangreiche Anpassungen für ein Paket vornehmen möchten, haben Sie normalerweise Pech
autoload
. Wenn Sie dennoch vermeiden möchten,require
können Sie Ihre Anpassungen verschieben, bis die Datei mithilfe von geladen wurdeeval-after-load
.Das Emacs-Handbuch behandelt dieses Thema in den folgenden Abschnitten:
quelle
autoload
ist vielleicht auch: Es geht (mehr oder weniger) darum, Befehlsdefinitionen bereitzustellen, damit Sie diese Befehle verwenden können.require
geht es darum, alles in einer Bibliothek (und in Bibliotheken, die diese Bibliothek rekursiv benötigt) verfügbar zu machen. Emacs bietet mehr als nur Befehle. (Aber ja, natürlich wird die gesamte Bibliothek geladen, sobald ein automatisch geladener Befehl aufgerufen wird.)Treffen Sie in Bezug auf die Emacs-Initialisierung keine der beiden Entscheidungen. GitHub-Benutzer jwiegley verfügt über das ausgezeichnete Deklarationsmakro use-package , das ein Paket nach Bedarf erfordert oder automatisch lädt . Wird am besten verwendet, um das Laden von Paketen zu verschieben, die bei Bedarf geladen werden können.
quelle
Wenn Sie möchten, dass eine bestimmte Funktion direkt beim Start Ihres Emacs geladen wird und verfügbar ist, verwenden Sie require, andernfalls verwenden Sie autoload. Ich persönlich schätze die Startzeit sehr (ich starte Emacs tatsächlich ein paarmal pro Woche, manchmal mehrmals pro Tag neu), daher akzeptiere ich, dass es ein bisschen Zeit in Anspruch nimmt, wenn Emacs eine bestimmte Funktion automatisch lädt, wenn ich sie benötige. Überlegen Sie sich also, was direkt nach dem Start von Emacs verfügbar sein soll und was bei Bedarf geladen werden kann.
quelle