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

Hel*_*ang 2 rust

fn main() {
    let f = 1;

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

    match f {
        _ => {
            println!("{}",f);
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

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

mca*_*ton 5

这些只是模式。书中进一步详细记录了模式。模式有多种形式:

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

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

  • 虽然功能参数恕我直言的模式不是惯用的。使用它们会模糊接口和实现之间的界线,并使该函数的用户难以阅读该接口。 (3认同)