12.16 受限值变量

普通的 Lisp 变量可被赋值为任意有效的 Lisp 对象。但部分 Lisp 变量并非由 Lisp 定义, 而是由 C 语言定义。这类变量中,绝大多数是 C 代码通过 DEFVAR_LISP 定义的—— 和 Lisp 中定义的变量一样,它们可以接收任意值。不过,还有一些变量是通过 DEFVAR_INTDEFVAR_BOOL 定义的。关于 C 语言层面的实现细节, see 编写 Emacs 原语, 尤其是对 syms_of_filename 类型函数的说明。

DEFVAR_BOOL 类型的变量仅能取 nilt 两个值。 若尝试为其赋值其他值,该变量会被自动设为 t

(let ((display-hourglass 5))
  display-hourglass)
     ⇒ t
Variable: byte-boolean-vars

该变量存储所有 DEFVAR_BOOL 类型变量组成的列表。

DEFVAR_INT 类型的变量仅能接收整数值。若尝试为其赋值其他类型的值, 会直接触发错误:

(setq undo-limit 1000.0)
error→ Wrong type argument: integerp, 1000.0
emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike