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解释器执行了前一个S表达式,这种情况下是单独的+

由于+没有绑定到任何值,只有函数定义,错误消息报告该符号作为变量的值为空。