如何跳过将其变体传递给宏的枚举名称?
How to skip enum name passing its variant to a macro?
我不想每次都提及包含变体的枚举名称,假设它始终相同。可能吗?
枚举中的 struct 变体是关键。
在更平凡的层面上:
我试过以下方法:
enum Types {
t1,
t2{id: u64}
}
macro_rules! createenum {
(enum $enumname: ident { $( $variant: ident ( $arg1: literal, $arg2: expr ) ,)* } ) => {
enum $enumname {
$( $variant, )*
}
impl $enumname {
fn arg2(&self) -> Option<Types> {
match self {
$( $enumname::$variant => Some(Types::$arg2), )*
_ => None
}
}
}
}
}
createenum! {
enum MyEnum {
Var1("one", t1),
Var2("two", t2{id: 5}),
}
}
显然上面的代码不起作用,因为 Rust 不知道 t1
和 t2
是什么。但我不愿意每次都输入基本枚举。
我该怎么办?
use Types::*;
Rust Playground demo
我不想每次都提及包含变体的枚举名称,假设它始终相同。可能吗?
枚举中的 struct 变体是关键。
在更平凡的层面上:
我试过以下方法:
enum Types {
t1,
t2{id: u64}
}
macro_rules! createenum {
(enum $enumname: ident { $( $variant: ident ( $arg1: literal, $arg2: expr ) ,)* } ) => {
enum $enumname {
$( $variant, )*
}
impl $enumname {
fn arg2(&self) -> Option<Types> {
match self {
$( $enumname::$variant => Some(Types::$arg2), )*
_ => None
}
}
}
}
}
createenum! {
enum MyEnum {
Var1("one", t1),
Var2("two", t2{id: 5}),
}
}
显然上面的代码不起作用,因为 Rust 不知道 t1
和 t2
是什么。但我不愿意每次都输入基本枚举。
我该怎么办?
use Types::*;
Rust Playground demo