Skip to content

Latest commit

 

History

History
49 lines (39 loc) · 1.09 KB

08.枚举.md

File metadata and controls

49 lines (39 loc) · 1.09 KB

枚举

模式匹配

fn value_in_cents(coin: Coin) -> u8 {
    match coin {
        Coin::Penny => 1,
        Coin::Nickel => 5,
        Coin::Dime => 10,
        Coin::Quarter(state) => {
            println!("State quarter from {:?}!", state);
            25
        },
    }
}

if let 控制流

let some_u8_value = Some(0u8);
match some_u8_value {
    Some(3) => println!("three"),
    _ => (),
}

由于 match 匹配必须是穷尽的,因此这里必须加上 _ => () 这样的样板代码。当只需处理其中一个匹配项时,可以简写:

if let Some(3) = some_u8_value {
    println!("three");
}

使用 if let 意味着编写更少代码,更少的缩进和更少的样板代码。然而,这样会失去 match 强制要求的穷尽性检查。match 和 if let 之间的选择依赖特定的环境以及增加简洁度和失去穷尽性检查的权衡取舍。

还可以使用 else 表达 _ => ...

let mut count = 0;
if let Coin::Quarter(state) = coin {
    println!("State quarter from {:?}!", state);
} else {
    count += 1;
}