使用多个匹配项时,是否有更简单的方法来绑定整个匹配项?

时间:2018-12-13 09:30:27

标签: syntax rust pattern-matching

可以使用@和变量名将变量绑定到匹配表达式,例如:

#[derive(Debug)]
enum Foo {
    First,
    Second,
    Third,
    Fourth,
}

fn bar(f: Foo) {
    match f {
        e @ Foo::First => println!("{:?}", e),
        _ => {}
    }
}

如果要将e绑定到多个匹配项,则必须对每种可能性重复绑定。

fn bar(f: Foo) {
    match f {
        e @ Foo::First | e @ Foo::Second | e @ Foo::Fourth => println!("{:?}", e),
        _ => {}
    }
}

有更简单的方法吗?

1 个答案:

答案 0 :(得分:4)

如果您要继续使用模式匹配,目前无法避免重复绑定。但是,一旦实现RFC 2535,您就可以像这样嵌套'OR'模式:

fn bar(f: Foo) {
    match f {
        e @ (Foo::First | Foo::Second | Foo::Fourth) => println!("{:?}", e),
        _ => {}
    }
}

实施跟踪问题在这里:https://github.com/rust-lang/rust/issues/54883