我可爱的功能:
(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 时,它就在范围内。
在 elisp 中模拟词汇闭包的一些方法在EmacsWiki 上的此页面 http://www.emacswiki.org/emacs/FakeClosures.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)