为什么在emacs的此示例中,词法绑定不起作用?

问题描述 投票:0回答:1

我从emacs Wiki复制粘贴了此示例:https://www.emacswiki.org/emacs/DynamicBindingVsLexicalBinding#toc2

Wiki说打印的东西应该是1,但对我来说它打印的是2,表明词汇绑定不起作用。有人知道为什么会这样吗?

我正在使用Emacs v26。 Debian。

这里是我缓冲区中的字面意思。我正在使用M-x eval-buffer对其进行评估。

;; -*- lexical-binding: t;-*-

(let ((a 1))                            ; binding (1)
  (let ((f (lambda () (print a))))
    (let ((a 2))                        ; binding (2)
      (funcall f))))

感谢您的帮助。

emacs elisp
1个回答
0
投票

您将lexical-binding设置为文件变量。这是在打开文件时设置的,因此,如果仅将文本添加到文件中而不关闭并重新打开它,则lexical-binding的值仍将为nil(执行C-h v lexical-binding RET并亲自查看)。因此,您正在使用动态绑定,并且该值将获得2。

© www.soinside.com 2019 - 2024. All rights reserved.