elisp中的变量绑定

时间:2013-12-20 02:21:41

标签: emacs 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)

结果是     ë

为什么会有不同的结果?

1 个答案:

答案 0 :(得分:5)

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

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