为什么词法绑定在 emacs 的这个例子中不起作用?
Why is lexical binding not working in this example in emacs?
我从 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。
如果您关闭并重新打开文件,文件变量 将被设置 (检查它!)并且当您评估表单时,您将得到 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))))
非常感谢你的帮助。
您将 lexical-binding
设置为文件变量。它在文件打开时设置,所以如果你只是将文本添加到文件而不关闭它并重新打开它,lexical-binding
的值仍然是 nil(执行 C-h v lexical-binding RET
并自己看看) .所以你使用的是动态绑定,你得到的值是 2。
如果您关闭并重新打开文件,文件变量 将被设置 (检查它!)并且当您评估表单时,您将得到 1。