我可爱的功能:
(defun f (x)
(lambda (y) (+ x y)))
然后,我期待这个:
(funcall (f 2) 2)
要返回4.但是,我得到了这个:
Debugger entered--Lisp error: (void-variable x)
那么如何从内部函数中捕获变量呢?
答案 0 :(得分:8)
你被elisp的动态范围所困扰。 lambda中的x
指的是调用lambda时在范围内的变量x
(因为在这种情况下,当你调用它时,范围内没有x
,你得到一个错误),而不是创建lambda时范围内的x
。
this page on the EmacsWiki解释了在elisp中模拟词法闭包的一些方法。