elisp:从内部函数捕获变量

Ron*_*Ron 6 elisp

我可爱的功能:

(defun f (x)
  (lambda (y) (+ x y)))
Run Code Online (Sandbox Code Playgroud)

然后,我期待这个:

(funcall (f 2) 2)
Run Code Online (Sandbox Code Playgroud)

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

Debugger entered--Lisp error: (void-variable x)
Run Code Online (Sandbox Code Playgroud)

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

sep*_*p2k 8

你被elisp的动态范围所困扰.将x在lambda指变量x是在范围上,当拉姆达被调用(并因为在这种情况下,没有x范围时,你怎么称呼它,你会得到一个错误),而不是在x当您创建这是在范围拉姆达.

在EmacsWiki的这个页面上解释了在elisp中模拟词法闭包的一些方法.