在枚举的多个匹配情况下重复相同操作的正确方法是什么?

问题描述 投票:0回答:1

我有一个稍微复杂的枚举,其中对多个可能的选项采取了相同的操作集,例如类似的东西

enum Select {
    option1,
    option2,
    option3,
    option4,
    option5,
}

fn a() {
    // do something
}

fn b() {
    // do something else
}

fn c() {
    // do some third thing
}

fn test(Select: selection) {
    match selection {
        Select::option1 => {
            a();
        },
        Select::option2 => {
            a();
            b();
        },
        Select::option3 => {
            a();
            c();
        },
        Select::option4 => {
            b();
            c();
        },
        Select::option5 => {},
    }
}

不是为不同的选项多次重复相同的语句,是否有一个选项可以只编写每个语句一次并选择它应该为哪些选项运行? IE。像这样的东西:

do a() if selection matches option1 or option2 or option3
do b() if selection matches option2 or option4
do c() if selection matches option3 or option4

我想我可以使用默认值执行多个匹配语句,但这被认为是正确的样式还是有更好的方法?

rust
1个回答
0
投票

match
表达式相比,可以执行单个分支,这里您想要的更多是一堆使用
if
宏的
matches!
语句。

这可能看起来像:

fn test(selection: Select) {
     if matches!(selection, option1 | option2 | option3) {
        a();
     }
     if matches!(selection, option2 | option4) {
        b();
     }
     if matches!(selection, option3 | option4) {
        c();
     }
}

参见游乐场

© www.soinside.com 2019 - 2024. All rights reserved.