1.7.2 符号无值绑定时的错误信息

如果你尝试对一个没有绑定任何值的符号求值,会收到错误信息。我们可以用之前 2 加 2 的例子来测试。在下面的表达式中,将光标放在 + 后面、第一个数字 2 前面,输入 C-x C-e

(+ 2 2)

在 GNU Emacs 22 中,你会打开一个 *Backtrace* 缓冲区,内容如下:

---------- Buffer: *Backtrace* ----------
Debugger entered--Lisp error: (void-variable +)
  eval(+)
  elisp--eval-last-sexp(nil)
  eval-last-sexp(nil)
  funcall-interactively(eval-last-sexp nil)
  call-interactively(eval-last-sexp nil nil)
  command-execute(eval-last-sexp)
---------- Buffer: *Backtrace* ----------

(同样,在 *Backtrace* 缓冲区输入 q 即可退出调试器。)

这次的回溯信息与我们最开始看到的错误不同,之前的错误是 ‘Debugger entered--Lisp error: (void-function this)’。本次是该符号没有变量值,而之前的错误是符号(单词 ‘this’)没有函数定义。

在对 + 的测试中,我们让 Lisp 解释器对 + 求值,并查找其变量值而非函数定义。实现方式是把光标放在符号后面,而不是像之前那样放在外层列表的括号后面。结果就是,Lisp 解释器对前面的符号表达式求值,在本例中就是单独的 +

由于 + 只绑定了函数定义,没有绑定变量值,因此错误信息提示该符号的变量值为空。