rust - 如何匹配 Rust 中的闭包
问题描述
我有一个ABC
带有 3 个变体的枚举,它们共享相同的S
结构,因此我想用相同的变量对它们调用相同的方法。我知道我可以实现一个特征,但这是对 where 示例的简化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))
}
}
我在匹配闭包的宏时遇到了困难。我该怎么做?我尝试了一个块,但这当然行不通。
看我也在强迫$self:ident: &ABC
,所以我可以匹配它的变体。
解决方案
推荐阅读
- botframework - 如何在管道中安装 Microsoft Bot Framework 工具然后使用
- websocket - 为 HTTP/2 代理实现 websocket 支持
- javascript - 如果我有参考 Firestore 更新文档?
- python - python中的多维非线性优化
- c++ - 为什么从 lower_bound 中减去一个数组会返回一个取消引用的值?
- java - 如何使用 Java Google Classroom API 获取 CourseWork 课程?
- postgresql - 使用带有 jooq 的子查询更新 postgres 中的表行
- design-patterns - 删除具有 puppet 资源的文件 tidy
- python - 为什么我的十六进制字符串的行为不像字符串?
- reactjs - React / Context API / TypeScript:如何初始化 Web 应用程序并避免 UI 在启动时闪烁?