defvar
não reatribui o valor de uma variável da mesma maneira que, digamos,
setq
ou setf
. Depois que uma variável tiver um valor, defvar
ela não será tocada.
Da defvar
documentação de:
(defvar SYMBOL &optional INITVALUE DOCSTRING)
Defina SYMBOL como uma variável e retorne SYMBOL.
...
O argumento opcional INITVALUE é avaliado e usado para definir SYMBOL, apenas se o valor de SYMBOL for nulo. Se SYMBOL for local do buffer, seu valor padrão é o que está definido; valores de buffer-local não são afetados. Se INITVALUE estiver ausente, o valor de SYMBOL não está definido.
...
Como você presumivelmente defvar
editou as variáveis em questão para fornecer valores a elas quando você carregou a biblioteca, recarregar a biblioteca não alterará os valores.
Consulte também o nó manual elisp em
Definindo variáveis globais .
Em vez de confiar defvar
, você sempre pode reatribuir valores com setq
. Como opção alternativa e desajeitada, você pode unintern
usar os símbolos para que os defvar
s não os encontrem ao recarregar:
(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)
primeiro?