【发布时间】:2017-10-31 11:44:13
【问题描述】:
我正在研究用于在 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,为什么(没有递归)?
【问题讨论】:
-
请在选项菜单中启用
debug-on-error并检查*Backtrace*缓冲区。 -
后面作为函数调用的时候好像不允许两个参数名相同。
-
嗯,你是允许(因此是你的问题的症状),但发生是
package-test-test绑定了变量@987654328 @ 到一个本身 evals(funcall func)的函数,然后它调用该函数。因此无限递归。