Rust 如何编写宏来匹配稍有不同的匹配语句?
我有类似的匹配语句Rust 如何编写宏来匹配稍有不同的匹配语句?,rust,macros,pattern-matching,Rust,Macros,Pattern Matching,我有类似的匹配语句 match self{ X::A(x) => x.call_me(), X::B(x) => call_me(), X::C(x) => call_me(), X::D(x) => call_me(), X::Z(x) => x.call_me(), } 我可以写两个宏,然后在一个匹配语句中以某种方式连接它们吗?如果没有,我将如何在单个宏中写入两种类型的模式,一种是A&Z模式,另一种是B、C、D模式?不是每行调用一个宏,而是创建一个包含所有模式
match self{
X::A(x) => x.call_me(),
X::B(x) => call_me(),
X::C(x) => call_me(),
X::D(x) => call_me(),
X::Z(x) => x.call_me(),
}
我可以写两个宏,然后在一个匹配语句中以某种方式连接它们吗?如果没有,我将如何在单个宏中写入两种类型的模式,一种是A&Z模式,另一种是B、C、D模式?不是每行调用一个宏,而是创建一个包含所有模式的宏:
macro_rules! the_macro {
($($alone:ident),* ; $($withx:ident),*) => {
match self {
$( X::$alone(_x) => call_me(), )*
$( X::$withx(x) => x.call_me(), )*
}
}
}
然后你可以这样使用它:
the_macro!(B, C, D; A, Z);