defvar
ไม่ได้โอนค่าของตัวแปรในลักษณะเดียวกับที่พูด
หรือsetq
setf
เมื่อตัวแปรมีค่าdefvar
จะไม่แตะต้องมัน
จากdefvar
docstring ของ:
(defvar SYMBOL &optional INITVALUE DOCSTRING)
กำหนด SYMBOL เป็นตัวแปรแล้วส่งคืน SYMBOL
...
อาร์กิวเมนต์ทางเลือก INITVALUE ได้รับการประเมินและใช้เพื่อตั้งค่า SYMBOL เฉพาะในกรณีที่ค่าของ SYMBOL เป็นโมฆะ ถ้า SYMBOL เป็นบัฟเฟอร์ท้องถิ่นค่าเริ่มต้นของมันคือสิ่งที่มีการตั้งค่า; ค่าบัฟเฟอร์ท้องถิ่นจะไม่ได้รับผลกระทบ หาก INITVALUE หายไปค่าของ SYMBOL จะไม่ถูกตั้งค่า
...
เนื่องจากคุณอาจdefvar
แก้ไขตัวแปรที่เป็นปัญหาเพื่อให้พวกเขามีค่าเมื่อคุณโหลดไลบรารีครั้งแรกการโหลดไลบรารีอีกครั้งจะไม่เปลี่ยนค่า
ดูเพิ่มเติมโหนดคู่มือ Elisp ใน
ตัวแปรที่กำหนดทั่วโลก
แทนที่จะอาศัยค่าคุณสามารถกำหนดอีกครั้งกับdefvar
setq
คุณสามารถunintern
ใช้สัญลักษณ์แทน clunky เพื่อให้defvar
s ไม่พบสัญลักษณ์เหล่านั้นเมื่อทำการรีโหลด:
(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)
ก่อน?