defvar
weist den Wert einer Variablen nicht auf die gleiche Weise zu, wie z. B.
setq
oder setf
. Sobald eine Variable einen Wert hat, defvar
wird sie nicht mehr berührt.
Aus defvar
dem Dokument:
(defvar SYMBOL &optional INITVALUE DOCSTRING)
Definieren Sie SYMBOL als Variable und geben Sie SYMBOL zurück.
...
Das optionale Argument INITVALUE wird ausgewertet und zum Festlegen von SYMBOL nur verwendet, wenn der Wert von SYMBOL ungültig ist. Wenn SYMBOL pufferlokal ist, wird der Standardwert festgelegt. Pufferlokale Werte sind nicht betroffen. Wenn INITVALUE fehlt, wird der Wert von SYMBOL nicht festgelegt.
...
Da Sie defvar
die fraglichen Variablen vermutlich so bearbeitet haben, dass sie beim ersten Laden der Bibliothek Werte erhalten, werden die Werte beim erneuten Laden der Bibliothek nicht geändert.
Siehe auch den elisp-Handbuchknoten zum
Definieren globaler Variablen .
Anstatt sich darauf zu verlassen defvar
, können Sie mit immer Werte neu zuweisen setq
. Als alternative, klobige Option können Sie unintern
die Symbole so verwenden, dass die defvar
s sie beim erneuten Laden nicht finden:
(defvar test-1 "test this")
(defvar test-2 "test this one, too")
test-1 ; => "test this"
test-2 ; => "test this one, too"
(defvar test-1 "trying to redefine")
(defvar test-2 "trying to redefine, too")
test-1 ; => "test this"
test-2 ; => "test this one, too"
(mapc #'unintern '(test-1 test-2))
test-1 ; => error!
test-2 ; => error!
(defvar test-1 "trying to redefine")
(defvar test-2 "trying to redefine, too")
test-1 ; => "trying to redefine"
test-2 ; => "trying to redefine, too"
(unload-feature 'myname)
zuerst?