1

我在 elisp 中编程,我想将符号与函数相关联,以便尝试访问变量而不是调用函数。特别是,当 lisp 代码尝试访问某个变量时,我想触发一个特殊的错误消息。有没有办法做到这一点?

示例:假设我希望变量评估为在访问变量current-time时评估的任何(current-time-string)值。这可能吗?

请注意,我不控制尝试访问变量的代码,因此可以编译代码,因此遍历树并用函数调用手动替换变量访问并不是一个真正的选择。

4

2 回答 2

3

您正在寻找 Common Lisp define-symbol-macro

Emacs Lisp 缺少这个特性,你无法完成你想要做的事情。

但是,如果您只想在访问变量时出错,则并非所有内容都会丢失。只要makunbound它,访问就会出错(当然,除非其他人先找到它)。

于 2013-10-22T01:30:18.393 回答
2

我不认为你能做到这一点。

正如 Sam 所说,define-symbol-macro这将是 Lisp 中最接近的东西(如果你让它听起来像是访问可能是预先编译的,在这种情况下甚至define-symbol-macro会无能为力)。Elisp 中最接近的东西是,但这比它必须以词法方式放置在访问周围的cl-symbol-macrolet限制更大。define-symbol-macro

于 2013-10-22T13:07:37.197 回答