模式匹配
模式匹配用一致的结构解构值: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 特别严格;通配符 _ 作为默认分支。