【发布时间】:2020-02-16 18:47:19
【问题描述】:
我有一个循环,我在每次迭代期间创建一个局部变量。然后我声明了一个 lambda,它在将来的某个时间使用局部变量。
(dolist (entry (read-lines "~/.emacs-projects"))
(let ((project (car (json-read-from-string entry)))) ;; <---- I NEED THIS ONE
(widget-create 'link
:button-prefix ""
:button-suffix ""
:action (lambda (wid &rest ignore) (load-project project)) ;; HERE
(format "%s : %s\n" (car project) (cdr project)))))
在上面的代码中,我创建了project,当:action 触发时,我想使用project 作为另一个函数的参数。目前,当运行 lambda 时,我得到了Symbol’s value as variable is void: project,这让我认为外部范围没有被保留。
如何延长project 的生命周期,以便在 lambda 中访问它?
【问题讨论】:
-
您正在寻找一个 closure(或类似物)。这是多年来 elisp 的一个常见问题,因此使用该术语进行搜索将获得结果(注意其中一些将早于词法绑定的可用性)。
标签: variables emacs lexical-scope