1

我不想在 中实现闭包行为Elisp,这里是代码:

(setq lexical-binding t)
(setq var 3)
(require 'cl)
(defun foo (n)
  #'(lambda (i)
    (incf n i)))
(defvar bar (foo var))
(funcall bar 1)

我想要得到的是,每次我运行 expr:(funcall bar 1)它都会将 expr 的结果增加1. 我不知道为什么它不能工作,有人可以给我解释一下吗?我在如何在 Emacs Lisp 中进行闭包中发现了一个类似的问题?但我无法理解。我的 Emacs 版本是 24.2.1,它似乎支持lexical scoping.

4

1 回答 1

1

lexical-binding变量相当特殊,我强烈建议不要使用setq它。仅在第一行的注释中通过 a 定义它-*- lexical-binding: t -*-(并且该注释仅在您重新访问相应文件后才生效)。

于 2013-01-22T20:13:34.260 回答