Rust 如何匹配锈蚀中的闭合
我有一个enumRust 如何匹配锈蚀中的闭合,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) }
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
,以便能够匹配其变体