【问题标题】:Can I match on all enum variants that have the same shape of their values?我可以匹配所有具有相同形状值的枚举变体吗?
【发布时间】:2020-02-24 16:12:48
【问题描述】:

我有一个枚举:

enum MyEnum {
    A(i32),
    B(i32),
    C,
    D,
    // ...
}

我可以同时匹配AB 吗:

let a = MyEnum::A(1);
match a {
    _(n) => { // do something for all variants which have one i32 value
    }
    _ => { // ignore the rest
    }
};

有没有办法做到这一点?我是否必须匹配所有变体并为每个变体应用相同的“主体”?

【问题讨论】:

  • 如果你不关心真实类型为什么不合并A和B?

标签: enums rust pattern-matching


【解决方案1】:

不,您想要的语法是不可能的;如果您有多种类型但数量相同,我什至不知道您的语法如何工作:

enum MyEnum {
    A(bool),
    B(String),
}

我是否必须匹配所有变体并为每个变体应用相同的“主体”?

是的,但是您可以在单个匹配臂中使用模式来匹配它们:

match a {
    MyEnum::A(n) | MyEnum::B(n) => {}
    _ => {}
};

【讨论】:

  • 我希望 rust 的类型推断系统足够强大。但我想这会很好。
  • 您可以创建一个宏来解包以匹配语句并调用任意函数。比如:展开!(a, ref sm => sm.f())。看到这个问题:stackoverflow.com/questions/60346796/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-05
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多