折腾了一天,发现派生属性宏无法操作token流,但记得属性宏是可以的,就怀疑属性宏和派生属性宏的有一个区别是不是,属性宏可以修改ast树,而派生宏不可以。
就在群里问了,得到了肯定的回答:派生宏,被派生的struct、enum、union所在的AST是只读的;属性宏,作用范围更广,是将整个被修饰的对象所在的AST输入到属性宏中,再将属性宏的输出重新编译.
参考资料(官方英文资料):
Procedural Macros - The Rust Reference
群友的回答:一个append,一个replace。
没有明确的说,这是两者的一个区别。所以把这个我认为是坑的地方发出来。