elisp 中有没有办法让变量访问触发函数调用



我正在用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更受限制,因为它必须以词法方式放置在访问周围。

最新更新