我从 emacs wiki 复制粘贴了这个例子:https : //www.emacswiki.org/emacs/DynamicBindingVsLexicalBinding#toc2
维基说打印出来的东西应该是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))))
Run Code Online (Sandbox Code Playgroud)
我会很感激你的帮助。
您设置lexical-binding为文件变量。这会在文件打开时设置,因此如果您只是将文本添加到文件中而不关闭并重新打开它,则 的值lexical-binding仍然为零(请自行C-h v lexical-binding RET查看)。因此,您正在使用动态绑定,并且您将获得 2 的值。
如果您关闭并重新打开文件,文件变量将被设置(检查它!)并且当您评估表单时,您将获得 1。
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |