匹配变量vs匹配占位符?

问题描述 投票:2回答:1
fn main() {
    let f = 1;

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

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

这两场比赛有什么区别吗? (两个都打印1)。有人能指出我第一场比赛的记录吗? Rust书(直到第9章)似乎只提到占位符_,但不是“你可以把任何名字(例如,在这种情况下为foo)作为匹配条件”。

rust
1个回答
5
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.