如何避免匹配枚举时出现语法重复?

How do I avoid syntax repitition when matching enums?

提问人:Snails 提问时间:1/12/2023 更新时间:1/12/2023 访问量:49

问:

我有一个结构,其中一个字段是枚举,当使用 match 语句时,有很多重复感觉是可以避免的。

基本上我现在所拥有的是

match self.foo // which is an enum, Foo {
    Foo::Bar => something,
    Foo::Bazz => something else,
    _ => you get the point

}

我试过了:

match self.foo {
    Foo::{
       Bar => something,
       Bazz => something else,
    }
}

但没有达到预期的效果。是否有可能不必每次都重新输入 Foo::,或者这只是我需要忍受的东西?

Rust 枚举模式 匹配

评论


答:

2赞 EvilTak 1/12/2023 #1

您可以使用该语句将 of 的所有变体纳入作用域:use Foo::*;Foo

enum Foo {
    Bar,
    Bazz,
}

fn main() {
    let foo = Foo::Bar;
    
    use Foo::*;
    match foo {
        Bar => println!("something"),
        Bazz => println!("something else"),
    }
}

1赞 kmdreko 1/12/2023 #2

您可以导入枚举变体的名称以直接使用它们:

use Foo::*;
match self.foo {
    Bar => something,
    Bazz => something else,
}

这就是无需在他们面前工作的方式和工作方式。NoneSomeOption::

评论

0赞 Kevin Anderson 1/12/2023
您能否将导入范围限制在语句中,或者如果要这样做,则需要用新的范围将其全部包围?match
0赞 kmdreko 1/12/2023
@KevinAnderson 只能在周围的范围内导入。