elisp中的变量绑定

Red*_*efl 3 emacs elisp

elisp计划

(defun test (ee) (symbol-value ee))
(setq e 1.1)
(test 'e)
Run Code Online (Sandbox Code Playgroud)

结果是1.1

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

(defun test (e) (symbol-value e))
(setq e 1.1)
(test 'e)
Run Code Online (Sandbox Code Playgroud)

结果是e

为什么会有不同的结果?

Dre*_*rew 5

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

如果使用不同的符号,例如ee,作为参数,则不存在变量捕获.这是动态绑定可能令人困惑的一个主要示例.