据我所知,Rust支持#[derive]
属性,以便在编译时从数据结构生成代码。如何为整个包装箱,模块或功能生成代码?此处不允许使用#[derive]
属性。
我想生成一个涉及项目中多个项目(结构/枚举/函数)的函数。
例如,此处给定的示例模块
#[derive(MyAgg)]
mod AAA {
struct BBB {}
struct CCC {}
fn ddd() {}
}
我想生产这个。
fn example1() {
print("{:?}", AAA::BBB {});
print("{:?}", AAA::CCC {});
AAA::ddd()
}
这个例子没有道理,但我认为这是正确的。
最佳答案
#[derive]
属性在模块上是不允许的,仅在结构,枚举和联合上是不允许的:
error: `derive` may only be applied to structs, enums and unions
--> src/main.rs:1:1
|
1 | #[derive(MyAgg)]
| ^^^^^^^^^^^^^^^^
Playground
有关扩展
#[derive]
宏的更多信息,可以在Rust书的Procedural Macros (and custom Derive)中找到。但是,您可以创建自己的程序宏。您可以查阅RFC来了解proc-macros。看看其他 crate (例如Serde或Derivative)也没有什么害处。