defvar
、と言うのと同じ方法で変数の値を再割り当てしません
setq
かsetf
。変数に値が設定されたら、defvar
それに触れないでください。
defvar
のドキュメント文字列から:
(defvar SYMBOL &optional INITVALUE DOCSTRING)
SYMBOLを変数として定義し、SYMBOLを返します。
...
オプションの引数INITVALUEが評価され、SYMBOLの値がvoidの場合にのみ、SYMBOLを設定するために使用されます。SYMBOLがバッファローカルである場合、そのデフォルト値は設定されたものです。バッファローカル値は影響を受けません。INITVALUEがない場合、SYMBOLの値は設定されません。
...
あなたはおそらくのでdefvar
与える問題の変数を編彼らはあなたが最初のライブラリをロードしたとき、再ロードライブラリーに値が変更されません値。
グローバル変数の定義に関するelisp手動ノードも参照してください
。
に依存する代わりにdefvar
、常にで値を再割り当てできますsetq
。別の不格好なオプションとして、リロード時にsが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)
最初?