defvarbir değişkenin değerini, diyelim setqveya olduğu gibi yeniden atamaz
setf. Bir değişkenin değeri olduğunda defvar
, ona dokunmaz.
Gönderen defvarbireyin docstringe:
(defvar SYMBOL &optional INITVALUE DOCSTRING)
SYMBOL'u değişken olarak tanımlayın ve SYMBOL öğesini döndürün.
...
İsteğe bağlı INITVALUE bağımsız değişkeni değerlendirilir ve yalnızca SYMBOL değeri geçersizse SYMBOL ayarlamak için kullanılır . SYMBOL buffer-local ise, varsayılan değeri ayarlanan değerdir; arabellek-yerel değerleri etkilenmez. INITVALUE eksikse, SYMBOL değeri ayarlanmaz.
...
defvarSöz konusu değişkenleri, kitaplığı ilk yüklediğinizde değer vermek üzere tahmin ettiğiniz için, kitaplığı yeniden yüklemek değerleri değiştirmez.
Ayrıca bkz . Global Değişkenleri Tanımlama ile ilgili elisp manuel düğümü
.
Güvenmek yerine, defvardeğerleri her zaman ile yeniden atayabilirsiniz setq. Alternatif, karmaşık bir seçenek olarak, uninternsembolleri defvaryeniden yüklediklerinde bulamazlar:
(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)önce?