与变量匹配还是与占位符匹配?

时间:2019-04-28 21:56:26

标签: rust

fn main() {
    let f = 1;

    match f {
        foo => {
            println!("{}",foo);
        }
    };

    match f {
        _ => {
            println!("{}",f);
        }
    };
}

两次比赛之间有什么区别吗? (均打印1)。谁能指出我记录了第一个比赛的位置? Rust书(直到第9章)似乎只提到占位符_,但没有“您可以输入任何名称(例如foo)作为匹配条件”。

1 个答案:

答案 0 :(得分:5)

这些只是模式。 Patterns are documented in more details further in the book。模式有多种形式:

  • 常量:1FOO
  • enum销毁:Some(y)None
  • struct销毁:Point { x, y }
  • 元组解构:(42, foo)
  • 绑定:foofoo @ (42, bar)
  • 范围:1 ... 42
  • 占位符:_

这两个示例之间没有什么区别,但是,命名模式在match表达式中通常不被视为顶级模式,而在子模式中,例如Some(foo) 。但是,命名模式在函数参数和let绑定中极为常见。