是否可以通过使用该宏的结构内部的派生宏来更改/生成代码?

Tim*_*aya 1 rust rust-macros

我很好奇是否可以更改使用派生宏的结构内部的代码,或者是否仅限于在外部生成新代码?

例子

通过 SomeMacro 将另一个字段添加到 Building 结构中。


#[derive(SomeMacro)]
pub struct Building {
  colour: String, 
  // Add height: u8 through derive macro
}
Run Code Online (Sandbox Code Playgroud)

Kev*_*eid 6

这不可能。这是派生宏的基本特征它们采用现有项目的标记并生成新的、单独的项目(通常是特征impl)。

如果您想修改struct项目本身,则必须创建一个属性宏,它可以返回输入标记的替换。属性宏不是使用derive属性调用的,而是属性本身:#[some_macro] pub struct Building { ...