可以使用@
和变量名将变量绑定到匹配表达式,例如:
#[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),
_ => {}
}
}
有更简单的方法吗?
答案 0 :(得分:4)
如果您要继续使用模式匹配,目前无法避免重复绑定。但是,一旦实现RFC 2535,您就可以像这样嵌套'OR'模式:
fn bar(f: Foo) {
match f {
e @ (Foo::First | Foo::Second | Foo::Fourth) => println!("{:?}", e),
_ => {}
}
}