重新编译不会更正函数调用中的拼写错误

时间:2013-12-02 06:52:37

标签: emacs lisp common-lisp sbcl slime

我最近一直在看这个,并且不确定它是否是SBCL问题,Emacs问题,SLIME问题,或者我自己对“编译”lisp文件的意义的理解。

我会有一个功能,说这个:

(defun some-function (x) (call-this-funcshun))

我将编译并运行它,我将收到一个错误,我的函数call-this-funcshun未定义。然后我意识到这是因为有一个错字。所以改变它:

(defun some-function (x) (call-this-function))

在Emacs中,我使用Control-C Control-K重新编译整个文件(Emacs也会在编译之前自动保存)。然后Emacs报告Compilation finished.我移动到REPL。我再次尝试,键入(some-function whatever),我得到同样的错误。我搜索了一个小的lisp文件,看到call-this-funcshun显然无处可去。然而,我有一个错误,即没有定义此功能。

是否存在Emacs或SBCL正在进行的某种缓存导致这种情况?这让我疯了。值得注意的是,如果我退出SLIME然后再次启动它,问题就解决了。另外值得注意的是,这并不会影响我的所有代码编辑,只是偶尔。

2 个答案:

答案 0 :(得分:4)

由于某种原因,可能没有加载文件。

我会将*load-verbose*设置为T,并观察LOAD实际被调用。 将*load-print*设置为T也会导致打印有关定义的信息。

答案 1 :(得分:1)

我已经看到两种情况可能会导致行为看起来像你所看到的那样:

  1. 当文件中的符号与REPL中的符号不​​同时。符号的名称只是识别符号的简写,同一简写可以根据您使用的包来识别不同的符号。有些方法可以让您对您指的是哪个符号感到惊讶因此,即使您非常确定它们是相同的,也可以使用SYMBOL-PACKAGE进行检查。

  2. 未保存缓冲区时。我不确定Cc Ck现在如何处理这个问题(因为我编辑它为我自动保存),但一般编译和加载工具往往是从文件而不是缓冲