12.2 永不改变的变量

在 Emacs Lisp 中,某些符号求值时会得到自身。这包括 nilt,以及所有名称以 ‘:’ 开头的符号(这类符号称为 关键字(keywords))。这些符号不能被重新绑定,其值也不能被修改。 任何试图对 nilt 进行赋值或绑定的操作,都会触发 setting-constant 错误。对于关键字(名称以 ‘:’ 开头的符号)也是如此 —— 前提是它已被存入标准的对象数组(obarray)中;但将这类符号赋值为它自身不会报错。

nil ≡ 'nil
     ⇒ nil
(setq nil 500)
error→ Attempt to set constant symbol: nil
Function: keywordp object

object 是一个名称以 ‘:’ 开头、且已存入标准对象数组(obarray)的符号,该函数返回 t;否则返回 nil

这些常量与使用 defconst 特殊形式定义的常量有着本质区别(see 定义全局变量)。defconst 仅用于告知开发者「你不打算修改该变量的值」,但即便你实际修改了它,Emacs 也不会抛出错误。

出于各类实际需求,还有少量额外的符号被设为只读状态。这包括 enable-multibyte-charactersmost-positive-fixnummost-negative-fixnum 以及其他一些符号。任何试图对这些符号进行赋值或绑定的操作,同样会触发 setting-constant 错误。

emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike