【发布时间】:2019-03-25 10:23:21
【问题描述】:
是否可以构建一个不输出任何内容但存储状态以构建列表的宏,然后再构建一个实际使用该数据的宏?
例如:
trait SomeTrait {}
#[derive(mark)]
struct Person {}
impl SomeTrait for Person {}
#[derive(mark)]
struct Item {}
impl SomeTrait for Item {}
#[derive(mark)]
struct Object {}
impl SomeTrait for Object {}
create_mapper! // this then outputs the below function
//assuming for the fact that data is loaded correctly before this macro is used
fn select_item(kind: String) -> impl SomeTrait {
match kind {
"person" => Person,
"item" => Item,
"object" => Object,
}
}
【问题讨论】:
-
请说的更具体些,要存什么货?你想怎么用?明确地说,程序宏可以做的不仅仅是宏,但不是魔术,存储状态需要将其存储在某个地方,静态,常量,其他东西。
-
您可能指的是
match,而不是您要生成的代码中的map。您还需要添加一个包罗万象的分支。 -
关于您的实际问题,我会保持明确并使用类型定义
enum。您可以定义一个简单的声明性宏来减少样板。
标签: rust rust-macros rust-proc-macros