嵌套(funcall函数)超过max-lisp-eval-depth,为什么?

时间:2017-10-31 11:44:14

标签: elisp ert

我正在研究在elisp中执行独立单元测试的两个常规函数。一个是关于做某事并重置我的包的所有自定义变量,另一个是关于在临时缓冲区中做某事并重置我的包的所有自定义变量。

功能(一般):

(defun package-test-test (func)
    ""
    (unwind-protect
        (funcall func)
      (reset-all-custom-package-variables)))

功能(临时缓冲):

    (defun package-test-test-in-buffer (func)
        ""
        (package-test-test
            (lambda ()
                (with-temp-buffer (funcall func)))))

当我现在打电话:(package-test-test-in-buffer (lambda () (insert "a")))它超过max-lisp-eval-depth,为什么(没有递归)?

1 个答案:

答案 0 :(得分:3)

你的问题是dynamic binding,它是Emacs Lisp中的默认值:函数中的func参数是相同的变量。 您需要重命名其中一个或使用lexical binding

另见How to live with Emacs Lisp dynamic scoping?