defvar
no reasigna el valor de una variable de la misma manera que, digamos
setq
o setf
. Una vez que una variable tiene un valor, defvar
no lo toca.
De defvar
la cadena de documentos:
(defvar SYMBOL &optional INITVALUE DOCSTRING)
Defina SÍMBOLO como una variable y devuelva SÍMBOLO.
...
El argumento opcional INITVALUE se evalúa y se usa para establecer SYMBOL, solo si el valor de SYMBOL es nulo. Si SYMBOL es local en el búfer, su valor predeterminado es el establecido; los valores locales del búfer no se ven afectados. Si falta INITVALUE, el valor de SYMBOL no se establece.
...
Como presumiblemente defvar
editó las variables en cuestión para darles valores cuando cargó la biblioteca por primera vez, volver a cargar la biblioteca no cambiará los valores.
Consulte también el nodo manual elisp sobre
Definición de variables globales .
En lugar de confiar en defvar
, siempre puede reasignar valores con setq
. Como opción alternativa, torpe, puede unintern
usar los símbolos para que los defvar
s no los encuentren al recargar:
(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)
primero?