defvarno reasigna el valor de una variable de la misma manera que, digamos
setqo setf. Una vez que una variable tiene un valor, defvar
no lo toca.
De defvarla 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 defvareditó 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 uninternusar los símbolos para que los defvars 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?