defvar
không gán lại giá trị của biến theo cùng một cách như, nói
setq
hoặc setf
. Khi một biến có giá trị, defvar
sẽ không chạm vào nó.
Từ defvar
chuỗi của:
(defvar SYMBOL &optional INITVALUE DOCSTRING)
Xác định SYMBOL là một biến và trả về SYMBOL.
...
Đối số tùy chọn INITVALUE được ước tính và được sử dụng để đặt SYMBOL, chỉ khi giá trị của SYMBOL bị vô hiệu. Nếu SYMBOL là bộ đệm cục bộ, giá trị mặc định của nó là giá trị được đặt; giá trị đệm-cục bộ không bị ảnh hưởng. Nếu INITVALUE bị thiếu, giá trị của SYMBOL không được đặt.
...
Vì bạn có thể chỉnh sửa defvar
các biến trong câu hỏi để cung cấp cho chúng các giá trị khi bạn tải thư viện lần đầu tiên, tải lại thư viện sẽ không thay đổi các giá trị.
Xem thêm nút thủ công elisp trên
Xác định biến toàn cầu .
Thay vì dựa vào defvar
, bạn luôn có thể gán lại các giá trị với setq
. Thay vào đó, tùy chọn cồng kềnh, bạn có thể unintern
ký hiệu để các defvar
s sẽ không tìm thấy chúng khi tải lại:
(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)
đầu tiên?