elisp:从内部函数捕获变量

时间:2011-02-16 17:41:53

标签: elisp

我可爱的功能:

(defun f (x)
  (lambda (y) (+ x y)))

然后,我期待这个:

(funcall (f 2) 2)

要返回4.但是,我得到了这个:

Debugger entered--Lisp error: (void-variable x)

那么如何从内部函数中捕获变量呢?

1 个答案:

答案 0 :(得分:8)

你被elisp的动态范围所困扰。 lambda中的x指的是调用lambda时在范围内的变量x(因为在这种情况下,当你调用它时,范围内没有x,你得到一个错误),而不是创建lambda时范围内的x

this page on the EmacsWiki解释了在elisp中模拟词法闭包的一些方法。