【发布时间】:2015-07-25 19:19:05
【问题描述】:
Python 3 有函数 locals() 和 globals() 允许将当前作用域的命名值传递给函数,至少是为了只读目的。
在 emacs lisp 中,我想编写一个用于字符串插值的函数。为此,它需要访问调用范围的 lexical 变量。由于我想避免在宏更改时重新编译其他文件,所以显而易见的解决方案——使用宏——是不可行的。
是否有可能在 emacs lisp 中执行此操作?
我已经尝试了函数lisp--local-variables,但它不适用于lexical-binding 是t。
来自 Elisp 文档的一些相关引述
(在内部,词法环境是一个符号值列表 对,alist 中的最后一个元素是符号 't' 而不是 而不是一个缺点细胞。这样的 alist 可以作为第二个参数传递 到 `eval' 函数,以便在 哪个来评估一个表格。 *注意评估::.大多数 Emacs Lisp 程序, 但是,不应该直接与这个词法环境交互 方式;只有调试器等专门的程序。)
目前,Emacs Lisp 闭包对象由列表表示 以符号“闭包”作为第一个元素,一个表示 词法环境作为第二个元素,参数列表和 身体形式作为其余元素:
;; lexical binding is enabled. (lambda (x) (* x x)) => (closure (t) (x) (* x x))然而,闭包的内部结构是“暴露的” 到 Lisp 世界的其他部分被认为是内部实现 细节。因此,我们建议不要直接检查或 改变闭包对象的结构。
【问题讨论】:
-
您可以使用
M-x report-emacs-bug请求此类功能。
标签: elisp lexical-scope