defvar
वैरिएबल के मान को उसी तरह से पुन: असाइन नहीं करता है, जैसे कि,
setq
या setf
। एक बार एक वैरिएबल का मान होने के बाद, defvar
उसे स्पर्श नहीं किया जाएगा।
से defvar
की docstring:
(defvar SYMBOL &optional INITVALUE DOCSTRING)
SYMBOL को एक चर के रूप में परिभाषित करें, और SYMBOL लौटें।
...
वैकल्पिक तर्क INITVALUE का मूल्यांकन किया जाता है, और SYMBOL सेट करने के लिए उपयोग किया जाता है, केवल अगर SYMBOL का मूल्य शून्य है। यदि SYMBOL बफर-लोकल है, तो इसका डिफ़ॉल्ट मान सेट है; बफर-स्थानीय मान प्रभावित नहीं होते हैं। यदि INITVALUE गायब है, तो SYMBOL का मान सेट नहीं है।
...
चूँकि defvar
जब आप पहली बार लायब्रेरी को लोड करते हैं, तो उन्हें मान देने के लिए विचारणीय रूप से वैरिएबल को एड करें, लायब्रेरी को पुनः लोड करने से मान नहीं बदलेंगे।
डिफाइनिंग ग्लोबल वैरिएबल पर एलीश मैनुअल नोड भी देखें
।
पर भरोसा करने के बजाय defvar
, आप हमेशा मूल्यों को फिर से असाइन कर सकते हैं setq
। एक विकल्प के रूप में, क्लंकी विकल्प, आप unintern
प्रतीक कर सकते हैं ताकि defvar
एस उन्हें फिर से लोड करने पर न मिले:
(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)
पहले?