elisp:从内部函数捕获变量

标签 elisp

我可爱的功能:

(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/

相关文章:

xml - 使用 emacs elisp 解析 XML 并查找嵌套属性

lisp - 向量中字符串的相等性

emacs - 帮助为 emacs etags 搜索编写 emacs lisp

git - 在 git 中切换分支时,如何让 Emacs 恢复所有未更改的缓冲区?

c - 是否可以使用 C 为 GNU Emacs 编写自定义原语?

Emacs:将标记区域内的每个由 2 位数字组成的数字加 1

emacs - 在将表达式放入 lambda 之前评估表达式

emacs - 如何使 .emacs 文件具有幂等性?

emacs - Elisp中的过滤功能

emacs - 在elisp中,如何将一个 "var=value\n..."的字符串求值成同名的lisp变量?