Rust 如何匹配锈蚀中的闭合

Rust 如何匹配锈蚀中的闭合,rust,macros,Rust,Macros,我有一个enumABC,其中有3个变量共享相同的Sstruct,因此我想用相同的变量对它们调用相同的方法。我知道我可以实现一个trait,但这是一个简化的示例,a、B和C具有其他结构,使它们不同,但它们共享相同的方法 enum S{} impl S{ pub fn do_something(&self, number: u8) -> Result<(),()>{ } } enum ABC{ A(S), B(S), C(S) }

我有一个enum
ABC
,其中有3个变量共享相同的
S
struct,因此我想用相同的变量对它们调用相同的方法。我知道我可以实现一个trait,但这是一个简化的示例,
a
B
C
具有其他结构,使它们不同,但它们共享相同的方法

enum S{}

impl S{
    pub fn do_something(&self, number: u8) -> Result<(),()>{
    }
}

enum ABC{
    A(S),
    B(S),
    C(S)
}

//This is my attempt, but I don't know how to match for closures
macro_rules! for_each_stack {
    ($self:ident: &ABC, $b:block) => { 
        match $self {
            ABC::A(s) => $b(s),
            ABC::B(s) => $b(s),
            ABC::C(s) => $b(s),
        }
     }
}

impl ABC {
    //I'm trying to substitute this:
    pub fn do_something(&self, number: u8) {
        match self {
            ABC::A(s) => s.do_something(number),
            ABC::B(s) => s.do_something(number),
            ABC::C(s) => s.do_something(number),  
        }
    }
    //By this macro call
    pub fn do_something2(&self, number: u8) {
        for_each_stack!(self, |s| s.do_something(number))
    }
}
enum S{}
impl S{
pub fn do_something(&self,编号:u8)->结果{
}
}
枚举ABC{
A(S),,
B(S),,
丙(S)
}
//这是我的尝试,但我不知道如何匹配闭包
宏规则!对于每个\u堆栈{
($self:ident:&ABC,$b:block)=>{
匹配$self{
ABC::A(s)=>b(s),
ABC::B(s)=>B(s),
ABC::C(s)=>b(s),
}
}
}
实施ABC{
//我试图用这个来代替:
pub fn do_something(&self,编号:u8){
匹配自我{
ABC::A(s)=>s.do_某事(数字),
ABC::B(s)=>s.做点什么(数字),
ABC::C(s)=>s.做点什么(数字),
}
}
//通过这个宏调用
pub fn do_something 2(&self,编号:u8){
对于每个堆栈!(self,| s | s.do|u something(number))
}
}

我在匹配关闭宏时遇到困难。我该怎么做?我试过用木块,但这当然不行

看,我也在强制执行
$self:ident:&ABC
,以便能够匹配其变体