Skip to content

条件分支

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 也是表达式,各臂类型必须相同。

参考

基于 MIT 许可发布