我在elisp中编程,我想将一个符号与一个函数相关联,以便尝试访问该变量而不是调用该函数。特别是,当lisp代码尝试访问某个变量时,我想触发一条特殊的错误消息。有没有办法做到这一点?
示例:假设我希望变量current-time
在访问变量时评估为(current-time-string)
计算结果。这可能吗?
请注意,我不控制尝试访问变量的代码,因此可以编译代码,因此遍历树并使用函数调用手动替换变量访问实际上不是一种选择。
答案 0 :(得分:3)
您正在寻找Common Lisp define-symbol-macro
。
Emacs Lisp缺乏此功能,你无法完成你想要做的事情。
但是,如果您只是想在访问变量时出错,那么并非所有内容都会丢失。
只有makunbound
它和访问权限才会出错(当然,除非其他人先发现它)。
答案 1 :(得分:2)
我认为你不能那样做。
正如Sam所说,define-symbol-macro
将是Lisp中最接近的东西(因为你听起来好像是预先编译了访问,在这种情况下,即使define-symbol-macro
也无能为力)。 Elisp中最接近的是cl-symbol-macrolet
,但这比define-symbol-macro
更有限,因为它必须以词汇方式放置在访问周围。