当你定义的值为函数或函数列表的变量时,应分别使用以 ‘-function’ 或 ‘-functions’ 结尾的名称。
还有一些其他的变量命名规范,完整列表如下:
该变量是普通钩子(hook)(see Hooks)。
变量的值是一个函数。
变量的值是一个函数列表。
变量的值是一个形式(表达式)。
变量的值是一个形式列表(表达式列表)。
值是一个谓词 — 即单参数函数,执行成功返回非 nil,失败返回 nil。
值的意义仅在于是否为 nil。
由于这类变量后续往往会被扩展使用更多取值,因此不强烈推荐该命名规范。
值是一个程序名。
值是一条完整的 Shell 命令。
值用于指定命令的选项参数。
该变量为内部使用,定义在文件 prefix.el 中。 (2018 年之前贡献的 Emacs 代码可能遵循其他已逐步淘汰的规范。)
该变量供内部使用,且是在 C 代码中定义的。 (2018 年之前贡献的 Emacs 代码可能遵循其他规范,这些规范正在逐步淘汰。)
定义变量时,务必考虑是否应将其标记为安全(safe)或风险(risky),详见 文件局部变量。
当定义并初始化一个持有复杂值的变量时(例如主模式对应的语法表),最好将值的整个计算逻辑都写进 defvar 中,示例如下:
(defvar my-major-mode-syntax-table
(let ((table (make-syntax-table)))
(modify-syntax-entry ?# "<" table)
...
table)
docstring)
这种方法有多个优点。首先,如果用户在加载文件的过程中退出,该变量要么仍未初始化,要么已正确完成初始化,绝不会处于中间状态。若变量仍未初始化,重新加载文件即可完成正确的初始化。其次,变量初始化完成后重新加载文件,其值不会被改变 —— 这一点在用户已修改过变量值的情况下尤为重要。第三,使用 C-M-x 对 defvar 形式求值时,会对该变量进行完全的重新初始化。