Как многозадачность или шаблоны в выражениях соответствия?

#rust #match

#Ржавчина #сопоставление

Вопрос:

Есть ли способ привязки к одному и тому же имени группы сопоставлений or?

Так, например, в следующем коде я хотел n бы быть любым из совпадений or , 1 , 2 или 3 .

 fn main() {
    match 2 {
        n @ 1 | 2 | 3 => {
            println!("{}", n);
        }
        _ => {},
    }
}
 

Игровая площадка

Он жалуется на:

 error[E0408]: variable `n` is not bound in all patterns
 --> src/main.rs:3:17
  |
3 |         n @ 1 | 2 | 3 => {
  |         -       ^   ^ pattern doesn't bind `n`
  |         |       |
  |         |       pattern doesn't bind `n`
  |         variable not in all patterns
 

Ответ №1:

Просто окружение or соответствия () (скобками) делает привязку правильной:

 fn main() {
    match 2 {
        n @ (1 | 2 | 3) => {
            println!("{}", n);
        }
        _ => {},
    }
}
 

Игровая площадка