defvarne réaffecte pas la valeur d'une variable de la même manière que, disons
setqou setf. Une fois qu'une variable a une valeur, defvar
ne la touchez pas.
Du defvardocstring de:
(defvar SYMBOL &optional INITVALUE DOCSTRING)
Définissez SYMBOL en tant que variable et renvoyez SYMBOL.
...
L'argument facultatif INITVALUE est évalué et utilisé pour définir SYMBOL, uniquement si la valeur de SYMBOL est nulle. Si SYMBOL est buffer-local, sa valeur par défaut est celle qui est définie; les valeurs locales du tampon ne sont pas affectées. Si INITVALUE est manquant, la valeur de SYMBOL n'est pas définie.
...
Comme vous avez probablement defvarédité les variables en question pour leur donner des valeurs lors du premier chargement de la bibliothèque, le rechargement de la bibliothèque ne changera pas les valeurs.
Voir aussi le nœud manuel elisp sur la
définition des variables globales .
Au lieu de vous fier à defvar, vous pouvez toujours réaffecter des valeurs avec setq. Comme alternative, une option maladroite, vous pouvez uninternles symboles afin que les defvars ne les trouvent pas lors du rechargement:
(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)abord?