elisp 中的变量绑定



ELISP程序

(defun test (ee) (symbol-value ee))
(setq e 1.1)
(test 'e)

其结果是 1.1

然后将测试中的"ee"更改为"e",

(defun test (e) (symbol-value e))
(setq e 1.1)
(test 'e)

其结果是 e

为什么会有不同的结果?

形式参数e绑定到符号 e ,符号作为参数传递。 关闭词法绑定后,当计算(symbol-value e)时,形式参数 e 的值是符号 e ,返回该符号。 IOW,作为参数传递的符号与函数绑定的变量之间存在混淆(变量捕获)。

如果使用其他符号(例如 ee )作为参数,则没有变量捕获。这是动态绑定可能令人困惑的一个主要示例。

最新更新