Ich verstehe, was das automatische Laden für Funktionen bewirkt (Registerdatei, die geladen werden soll, wenn eine solche Funktion aufgerufen oder ihre Dokumentationszeichenfolge abgerufen wird). Es ist jedoch nicht klar, wie die Autoload-Funktion in Verbindung mit Variablen und Makros verwendet wird.
Ich habe zwei Fragen:
Was passiert, wenn das Paket einen Parameter hat, der als Variable implementiert ist, die der Benutzer festlegen kann, der jedoch nicht automatisch geladen wird? Sollten solche Variablen automatisch geladen werden? Wenn dies nicht der Fall ist, stellt sich heraus, dass solche Variablen nicht vorhanden sind. Die Lisp-Umgebung weiß nichts über sie, einschließlich ihrer Standardwerte, bis eine automatisch geladene Funktion aus dem Paket verwendet wird (normalerweise nach dem Laden von Konfigurationsdateien). Wenn der Benutzer sie in seiner festlegt In ihrer Konfigurationsdatei wird eine nicht vorhandene Variable festgelegt. Was passiert genau, wenn der Wert der Variablen eine nicht leere Liste ist und der Benutzer den Wert verwendet
push
oderadd-to-list
ändert? Gehen Standardwerte verloren?Was passiert, wenn ein Makro automatisch geladen wird? Wann sollten wir ein Makro automatisch laden?
quelle
setq
bearbeitet werden können (dh es spielt keine Rolle, welche Werte sie zuvor hatten), können standardmäßig indefvar
oder indefcustom
Form angegeben werden. Bei Listen, die vom Benutzer erweitert werden können, ist es jedoch am besten, sieeval-after-load
richtig zu verwenden . Manchmal sind auch gute Standardeinstellungen gut, auch wenn sie die Form einer Liste haben ;-)eval-after-load
einen Fehler in der Paketimplementierung darstellt. Typischerweiseeval-after-load
werden sollte für Fehlerbehebung oder höchst ungewöhnliche Anpassungen verwendet. Übrigens ist es möglicherweise besser, einen Haken zu verwenden, wenn das Paket einen zur Verfügung stellt.eval-after-load
, können Benutzer immer noch keine Elemente aus der Liste entfernen! Ich frage mich daher, ob ich die Standardeinstellungen überhaupt aufgeben sollte.eval-after-load
dies nur für ungewöhnliche Situationen erforderlich sein sollte. Es ist eines der Standardwerkzeuge im Toolkit für verzögertes Laden. Wenn die Leute solche Tools nicht verwenden möchten, können sierequire
die Bibliothek im Voraus nutzen (was Neulingen in der Tat ausnahmslos empfohlen wird - wenn sie zu dem Gedanken kommen, "Ich wünschte, Emacs würde etwas schneller starten", ' Ich habe wahrscheinlich genug gelernt, umcustomize-set-variable
eher zu verwenden als zu sein, istsetq
vielleicht ein guter. Aber ich habe jetzt nicht die Zeit für das sorgfältige Studium, das erforderlich ist, um meine Antwort in dieser Hinsicht zu verbessern. Wenn Sie dies für wichtig halten, warum schreiben Sie dann nicht Ihre eigene Antwort? Es wird sichtbarer sein als dieser lange Kommentarthread.