defvarkhông gán lại giá trị của biến theo cùng một cách như, nói
setqhoặc setf. Khi một biến có giá trị, defvar
sẽ không chạm vào nó.
Từ defvarchuỗ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 defvarcá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ể uninternký hiệu để các defvars 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?