我可爱的功能:
(defun f (x)
(lambda (y) (+ x y)))
然后,我希望这样:
(funcall (f 2) 2)
返回 4. 但唉,我得到了这个:
Debugger entered--Lisp error: (void-variable x)
那么如何从内部函数中捕获变量呢?
最佳答案
您已经被 elisp 的动态范围界定所困扰。 x
在 lambda 中指的是变量 x
当 lambda 被调用时,它在范围内(因为在这种情况下,当你调用它时,范围内没有 x
,你会得到一个错误),而不是 x
这是在您创建 lambda 时的范围内。
在 this page on the EmacsWiki 上解释了在 elisp 中模拟词法闭包的一些方法.
关于elisp:从内部函数捕获变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5020009/