Debugging 为什么在emacs启动期间和之后评估defun之间存在差异?
我有一个具有以下结构的函数(如果它很重要,我可以发布整个定义,但我认为它会让人分心,所以现在我跳过了这个): 我也有Debugging 为什么在emacs启动期间和之后评估defun之间存在差异?,debugging,emacs,elisp,Debugging,Emacs,Elisp,我有一个具有以下结构的函数(如果它很重要,我可以发布整个定义,但我认为它会让人分心,所以现在我跳过了这个): 我也有 ;; -*- lexical-binding: t -*- 它以前工作得很好,突然我开始从这个函数中得到以下错误: return-from: No catch for tag: --cl-block-lp--, ("\\(" . "\\)") 这个错误显然是错误的,因为标记确实存在。此外,当尝试单步执行函数时,我发现如果我再次评估定义(在emacs加载之后),我不会得到这个
;; -*- lexical-binding: t -*-
它以前工作得很好,突然我开始从这个函数中得到以下错误:
return-from: No catch for tag: --cl-block-lp--, ("\\(" . "\\)")
这个错误显然是错误的,因为标记确实存在。此外,当尝试单步执行函数时,我发现如果我再次评估定义(在emacs加载之后),我不会得到这个错误
我的问题是:
附言
我不确定为什么我写它时使用了cl block/return from而不是throw/catch——可能是因为我使用的是循环构造。我把它改为投掷/接球,现在可以了。当然可以,谢谢我在浏览器中编辑了定义并自动更正了它。最可能的解释是您忘记了
(require'cl)
或(require'cl lib)
某个地方,因此宏没有按应有的方式展开。还请注意,您使用了cl-block
(来自cl-lib
的宏)以及loop
和return from
(来自cl
的两个宏)。最好不要把cl
和cl-lib
这样混在一起。谢谢!听起来似乎是一个合理的解释,谢谢你的提示!如果不是cl block(让我猜猜-block?),cl包中返回的补码是什么?好的,对于碰巧阅读本文的人来说,block确实是返回的补码(尽管在我的系统中它是cl block的别名)。当然,谢谢我在浏览器中编辑了定义并自动更正了它。最可能的解释是您忘记了(require'cl)
或(require'cl lib)
某个地方,因此宏没有按应有的方式展开。还请注意,您使用了cl-block
(来自cl-lib
的宏)以及loop
和return from
(来自cl
的两个宏)。最好不要把cl
和cl-lib
这样混在一起。谢谢!听起来似乎是一个合理的解释,谢谢你的提示!如果不是cl block(让我猜猜-block?),那么cl包中要返回的补码是什么?好的,对于碰巧阅读本文的人来说,block确实是要返回的补码(尽管在我的系统中它是cl block的别名)。
return-from: No catch for tag: --cl-block-lp--, ("\\(" . "\\)")