求助:如何理解对 Macro 进行的 advice?

感谢各位前辈的解答!

@include-yy 前辈非常简短,言简意赅,应该也是为了指出:即使是对宏进行 advice,也应该像宏一样处理 lisp 表达式,而非直接引用值。

@Kana 感谢前辈,讲解非常详细,简直手把手教 :folded_hands:

@LdBeth 前辈给的例子,帮助我进一步理解了:

同时,以上也解答了我在读到另一个帖子时的疑惑:

原来 advice 机制其实可以用于宏,感叹!(@twlz0ne 前辈当时帖子的结论,现在看可能有失偏颇,或许此结论的时效性已下降)

因此我总结下来:

1、宏是一种 cons: (macro . 实际调用的函数);

2、Emacs 在求值某条 S-exp 时,如果其 car 是 macro,那么就当作宏去执行,参数会原封不动地交与 cdr 的函数去处理,最终求值其最终返还的表达式;

3、如果对宏进行 advice,那么是在 advice 其 cdr 的函数,那么自然:该函数接受的是未求值的参数、其返回的结果应该是将要被求值的表达式。

2 个赞