在 Emacs Lisp 中,某些符号求值时会得到自身。这包括 nil 和 t,以及所有名称以 ‘:’ 开头的符号(这类符号称为 关键字(keywords))。这些符号不能被重新绑定,其值也不能被修改。
任何试图对 nil 或 t 进行赋值或绑定的操作,都会触发 setting-constant 错误。对于关键字(名称以 ‘:’ 开头的符号)也是如此 —— 前提是它已被存入标准的对象数组(obarray)中;但将这类符号赋值为它自身不会报错。
nil ≡ 'nil
⇒ nil
(setq nil 500) error→ Attempt to set constant symbol: nil
若 object 是一个名称以 ‘:’ 开头、且已存入标准对象数组(obarray)的符号,该函数返回 t;否则返回 nil。
这些常量与使用 defconst 特殊形式定义的常量有着本质区别(see 定义全局变量)。defconst 仅用于告知开发者「你不打算修改该变量的值」,但即便你实际修改了它,Emacs 也不会抛出错误。
出于各类实际需求,还有少量额外的符号被设为只读状态。这包括 enable-multibyte-characters、most-positive-fixnum、most-negative-fixnum 以及其他一些符号。任何试图对这些符号进行赋值或绑定的操作,同样会触发 setting-constant 错误。