如何在匹配表达式中多重绑定或模式?

Net*_*ave 6 match rust

有没有办法将一堆或匹配项绑定到同名?

例如,在下面的代码中,我希望n是 或 匹配、12或 中的任何一个3

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

操场

它抱怨:

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
Run Code Online (Sandbox Code Playgroud)

Net*_*ave 8

只需用(括号)包围or匹配项()即可正确绑定:

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

操场