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加载之后),我不会得到这个错误

我的问题是:

  • 为什么我一开始会出现这个错误
  • 当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--, ("\\(" . "\\)")