我在 elisp 中编程,我想将符号与函数相关联,以便尝试访问变量而不是调用函数。特别是,当 lisp 代码尝试访问某个变量时,我想触发一个特殊的错误消息。有没有办法做到这一点?
示例:假设我希望变量评估为在访问变量current-time
时评估的任何(current-time-string)
值。这可能吗?
请注意,我不控制尝试访问变量的代码,因此可以编译代码,因此遍历树并用函数调用手动替换变量访问并不是一个真正的选择。
您正在寻找 Common Lisp define-symbol-macro
。
Emacs Lisp 缺少这个特性,你无法完成你想要做的事情。
但是,如果您只想在访问变量时出错,则并非所有内容都会丢失。只要makunbound
它,访问就会出错(当然,除非其他人先找到它)。
我不认为你能做到这一点。
正如 Sam 所说,define-symbol-macro
这将是 Lisp 中最接近的东西(如果你让它听起来像是访问可能是预先编译的,在这种情况下甚至define-symbol-macro
会无能为力)。Elisp 中最接近的东西是,但这比它必须以词法方式放置在访问周围的cl-symbol-macrolet
限制更大。define-symbol-macro