emacs - elisp 中的变量绑定(bind)

标签 emacs elisp

elisp 程序

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

它的结果是 1.1

然后将test中的'ee'改成'e',

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

它的结果是 电子

为什么会有不同的结果?

最佳答案

形式参数e 绑定(bind)到符号e,作为参数传递。在词法绑定(bind)关闭的情况下,当(symbol-value e)被求值时,形式参数e的值是符号e,即回来。 IOW,作为参数传递的符号与函数绑定(bind)的变量之间存在混淆(变量捕获)。

如果您使用不同的符号,例如ee,作为参数,则没有变量捕获。 这是动态绑定(bind)为何令人困惑的主要示例。

关于emacs - elisp 中的变量绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20695258/

相关文章:

clojure - 学习一种 Lisp 有助于学习另一种吗?

emacs - 如何修复 emacs 错误 "old-style backquotes detected"

emacs - 在 Emacs 中切换颜色主题 ( < v.24)

regex - 正则表达式作为触发器

emacs 建议恢复文件,但我错过了 : how to make it prompt?

regex - 恢复 Emacs 中的垂直缓冲区位置

json - 如何在 TextMate、Emacs、BBEdit 或 Sublime Text 2 中缩进 JSON 数据?

emacs - 使用Emacs作为服务器,只打开一个窗口,应该最大化

emacs - 如何配置 Emacs 以专用计算器窗口?

emacs 函数 c-forward-sws : Wrong type argument: stringp, nil