Rust 在struct define中调用另一个宏

Rust 在struct define中调用另一个宏,rust,rust-macros,Rust,Rust Macros,我制作了一个定义结构的简单宏 macro\u规则__身体{ ($($body:tt)+)=>{ $($正文)+ }; } 宏规则!新结构{ ($(#[$attr:meta])*结构$name:ident{$($body:tt)+})=>{ $(#[$attr])*结构$name{ __body!($($body)+); } }; } 新结构!{ #[导出(反序列化)] 结构测试{ a:布尔, b:绳子, } } 编译此代码时,它会引发一个错误: | 14 | | |身体!($($body)+)

我制作了一个定义结构的简单宏

macro\u规则__身体{
($($body:tt)+)=>{
$($正文)+
};
}
宏规则!新结构{
($(#[$attr:meta])*结构$name:ident{$($body:tt)+})=>{
$(#[$attr])*结构$name{
__body!($($body)+);
}
};
}
新结构!{
#[导出(反序列化)]
结构测试{
a:布尔,
b:绳子,
}
}
编译此代码时,它会引发一个错误:

|
14 | | |身体!($($body)+);
|^应为“”:`
...
19 |/新结构!{
20 | |#[导出(反序列化)]
21 | |结构试验{
22 | a:,
23 | | b:字符串,
24 | |   }
25 | | }
|在这个宏调用中
|
根据:

宏可以扩展为表达式、语句、项(包括traits、impl和外来项)、类型或模式

和struct字段都不是这些字段,因此不能使用声明性宏。您可能想试试。

根据:

宏可以扩展为表达式、语句、项(包括traits、impl和外来项)、类型或模式


和struct字段都不是这些字段,因此不能使用声明性宏。您可能想试试。

如果您只是直接使用
$body
标记,而不是将它们传递给另一个宏,这将很好地工作。ie
$($body)+
而不是
\uubody!($($body)+)
。如果您直接使用
$body
标记,而不是将它们传递给另一个宏,那么这将很好地工作。ie
$($body)+
而不是
\uubody!($($body)+)