模式匹配

模式匹配用一致的结构解构值:match 必须穷尽所有可能,if let / while let 处理单分支。与 结构体与枚举借用与引用数据类型 中的切片模式深度结合。


match

match x {
    0 => {}
    1 | 2 => {}
    3..=9 => {}
    _ => {}
}
  • 分支是表达式,各 arm 类型需统一。
  • 绑定Some(v)Err(e) 把内部值绑到变量。
  • 守卫 if:额外条件。

解构 struct 与 enum

let Point { x, y } = p;
match msg {
    Message::Quit => {}
    Message::Move { x, y } => {}
    Message::Write(s) => {}
}

部分移动match 中从 var 按字段/变体移出子值后,遵守 所有权 对部分移动的限制。


if let / while let

if let Some(v) = opt { ... }
while let Some(x) = iter.next() { ... }

适合只关心一种形态,不必写完整 match


@ 绑定与 ..

  • pattern @ sub:匹配的同时把整块绑到变量。
  • ..:忽略其余字段或切片元素(需合法位置)。

ref / ref mut(遗留场景)

在模式里用 ref / ref mut 绑定引用而非移动所有权,在闭包捕获或需借用时偶见;新代码常直接用 & 模式或显式类型。


穷尽性

match 若未覆盖所有变体,编译报错。对 bool、enum 特别严格;通配符 _ 作为默认分支。


相关链接