主题
条件分支
if 的条件必须是 bool,没有真值转换。if / else 是表达式,各分支类型必须一致,结果可以赋给绑定。
rust
let n = 3;
let label = if n > 0 { "pos" } else { "non-pos" };分支里用分号变成语句后,该分支的类型是 ()。只在需要值时省略最后一条的分号。
if let
只关心某一种模式时用 if let,避免完整 match:
rust
if let Some(name) = maybe_name {
println!("{name}");
} else {
println!("missing");
}let 链(if let / let else)用来在模式失败时提前退出:
rust
let Some(name) = maybe_name else {
return;
};match
match 必须穷尽。模式按书写顺序尝试,可用 | 合并、if 守卫收窄、_ 兜底。
rust
fn http_category(status: u16) -> &'static str {
match status {
200 | 201 | 204 => "success",
400..=499 => "client_error",
code if code >= 500 => "server_error",
_ => "other",
}
}匹配可解构元组、结构体、枚举。需要用值但不绑定名字时用 _ 或 ..。match 也是表达式,各臂类型必须相同。
