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