为什么这段代码无法与Emacs-lisp一起使用

时间:2013-01-02 08:35:03

标签: closures elisp

我不想在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

1 个答案:

答案 0 :(得分:1)

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