模式匹配时是否可以使用变量的值而不是绑定它?

时间:2016-07-12 19:34:33

标签: enums pattern-matching rust

考虑以下

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,但我无法在网上找到这个问题的答案。

1 个答案:

答案 0 :(得分:2)

您要找的是match guards

如果您允许FooBar派生自Copy ClonePartialEq,则可以为其值构建match guards

let bar_match = FooBar::Bar;
let answer: bool = match what {
  Whatever { f_type } if f_type == FooBar::Bar => true,
  _ => false,
};

Full play.rust-lang.org example.