【问题标题】:Is it possible to use the value of a variable when pattern matching instead of binding to it? [duplicate]模式匹配时是否可以使用变量的值而不是绑定到它? [复制]
【发布时间】:2016-07-12 19:34:32
【问题描述】:

考虑以下

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 菜鸟,但我在网上的任何地方都找不到这个问题的答案。

【问题讨论】:

  • 仅供参考,: bool 是多余的;类型由match arm 的值推断。

标签: enums pattern-matching rust


【解决方案1】:

您要查找的内容称为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.

【讨论】:

    猜你喜欢
    • 2021-07-24
    • 2018-08-27
    • 1970-01-01
    • 2021-10-06
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多