考虑以下
enum FooBar {
Bar,
Foo,
}
struct Whatever {
f_type: FooBar,
}
let what = Whatever { f_type: FooBar::Bar };
我知道这有效:
let answer: bool = match what {
Whatever { f_type: FooBar::Bar } => true,
_ => false,
};
println!("{:?}", answer); // true
有没有办法让这个工作,bar_match
用于比较值而不是绑定到当前值?
let bar_match = FooBar::Bar;
let answer: bool = match what {
Whatever { f_type: bar_match } => true,
_ => false,
};
println!("{:?}", answer); // true
我是Rust noob,但我无法在网上找到这个问题的答案。
答案 0 :(得分:2)
您要找的是match guards。
如果您允许FooBar
派生自Copy
Clone
和PartialEq
,则可以为其值构建match guards
:
let bar_match = FooBar::Bar;
let answer: bool = match what {
Whatever { f_type } if f_type == FooBar::Bar => true,
_ => false,
};