我不想在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
。我不知道为什么它不起作用,有人可以向我解释一下吗?
我在How do I do closures in Emacs Lisp?中发现了类似的问题,但我无法理解。我的Emacs版本是24.2.1,似乎支持lexical scoping
。
答案 0 :(得分:1)
lexical-binding
变量相当特殊,我强烈建议永远不要使用setq
。仅在第一行的注释中通过-*- lexical-binding: t -*-
定义它(该注释仅在您重新访问相应文件后生效)。