8.5 使用 defvar 初始化变量

copy-region-as-kill 函数是用Emacs Lisp编写的。其中的两个函数,kill-appendkill-new,复制缓冲区中的一段区域并将其保存在一个名为 kill-ring 的变量中。本节描述了如何使用 defvar 特殊形式创建和初始化 kill-ring 变量。

(再次注意,术语 kill-ring 是不准确的。从缓冲区中剪切出来的文本可以被还原;它不是一个尸体环,而是一个可以复活的文本环。)

在Emacs Lisp中,诸如 kill-ring 这样的变量是通过使用 defvar 特殊形式创建并赋予初始值的。其名称来自于“定义变量”。

defvar 特殊形式类似于 setq,因为它设置变量的值。但与 setq 不同的有两点:首先,它仅在变量尚未具有值时设置变量的值。如果变量已经有值,defvar 就不会覆盖现有值。其次,defvar 具有文档字符串。

(有一个相关的宏,defcustom,用于用户自定义的变量。它比 defvar 更强大。 (See 使用 defcustom 设置变量.)