为什么在emacs启动期间评估defun与以后之间存在差异?

时间:2015-09-07 01:46:00

标签: debugging emacs elisp

我有一个具有以下结构的函数(我可以发布整个定义,如果它很重要,但我认为它会分散注意力,所以现在我跳过这个):

(defun my-func (...)
  (save-excursion
    (cl-block lp
      (let (...)
        (loop for ... in ... do
         ...
         (return-from lp ...))))))

我也有

;; -*- lexical-binding: t -*-

过去工作正常,突然我开始从这个函数中得到以下错误:

return-from: No catch for tag: --cl-block-lp--, ("\\(" . "\\)")

这个错误显然是错误的,因为标签确实存在。此外,当试图单步执行该函数时,我发现如果我再次评估定义(在加载emacs之后),我不会收到此错误。

我的问题是:

  1. 为什么我首先得到这个错误?
  2. 什么可能导致此代码在加载emacs时出现一次失败,并在再次评估时成功?
  3. P.S。

    我不确定为什么我用cl-block / return-from而不是throw / catch编写它 - 可能是因为我正在使用循环结构。我将它更改为throw / catch,现在可以正常工作。

0 个答案:

没有答案