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);