普通的 Lisp 变量可被赋值为任意有效的 Lisp 对象。但部分 Lisp 变量并非由 Lisp 定义,
而是由 C 语言定义。这类变量中,绝大多数是 C 代码通过 DEFVAR_LISP 定义的——
和 Lisp 中定义的变量一样,它们可以接收任意值。不过,还有一些变量是通过
DEFVAR_INT 或 DEFVAR_BOOL 定义的。关于 C 语言层面的实现细节,
see 编写 Emacs 原语,
尤其是对 syms_of_filename 类型函数的说明。
DEFVAR_BOOL 类型的变量仅能取 nil 或 t 两个值。
若尝试为其赋值其他值,该变量会被自动设为 t:
(let ((display-hourglass 5))
display-hourglass)
⇒ t
该变量存储所有 DEFVAR_BOOL 类型变量组成的列表。
DEFVAR_INT 类型的变量仅能接收整数值。若尝试为其赋值其他类型的值,
会直接触发错误:
(setq undo-limit 1000.0) error→ Wrong type argument: integerp, 1000.0