Могу ли я сопоставить все варианты перечислений, которые имеют одинаковую форму своих значений? - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть перечисление:

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

Могу ли я сопоставить A и B одновременно с чем-то вроде этого:

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

Есть ли способ выполнить sh это? Должен ли я соответствовать всем вариантам и применять одно и то же «тело» для каждого?

1 Ответ

4 голосов
/ 24 февраля 2020

Нет, желаемый синтаксис невозможен; Я даже не знаю, как мог бы работать ваш синтаксис, если бы у вас было несколько типов, но с одинаковым количеством:

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

Должен ли я сопоставлять все варианты и применять одно и то же «тело» для каждого ?

Да, но вы можете использовать шаблоны для их сопоставления в одной руке:

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