defvar 初始化变量 ¶copy-region-as-kill 函数由 Emacs Lisp 编写。
其中的两个函数 kill-append 和 kill-new
会复制缓冲区中的选区并保存到名为 kill-ring 的变量中。
本节介绍如何使用 defvar 特殊形式
创建并初始化 kill-ring 变量。
(我们再次说明,kill-ring 这个名称其实并不准确。
从缓冲区中剪切的文本可以被取回,
它并非“尸体环”,而是可“复活”的文本环。)
在 Emacs Lisp 中,
像 kill-ring 这样的变量
通过 defvar 特殊形式创建并赋予初始值,
名称取自 “define variable”。
defvar 特殊形式与 setq 类似,
都用于设置变量的值。
它与 setq 有三点不同:
第一,它会将变量标记为 “特殊(special)”,
使其始终采用动态绑定,
即使 lexical-binding 为 t 也是如此
(see let 绑定变量的方式)。
第二,它仅在变量尚无值时才设置其值;
如果变量已有值,defvar 不会覆盖现有值。
第三,defvar 支持文档字符串。
(还有一个相关宏 defcustom,
专为用户需要自定义的变量设计,
功能比 defvar 更丰富。
(See Setting Variables with defcustom.)