if let语法使您能够将if和let组合成一种不太简短的形式来解决与一种模式匹配的值,而疏忽其余模式。 例如:该程序与Option <u8>值匹配,但仅想在值为3时执行代码:

fn main() {    let some_u8_value = Some(0u8);    match some_u8_value {        Some(3) => println!("three"),        _ => (println!("啥也不是")),    }}

咱们想对Some(3)匹配做点什么,但对其余Some <u8>值或None值什么都不做。 为了满足match表达式,咱们只须要解决一个变体就增加_ =>(),然而须要增加的许多样板代码。
相同,咱们能够应用if let以更短的形式编写此代码并实现完全一致的匹配成果:

fn main() {    let some_u8_value = Some(8u8);    if let Some(3) = some_u8_value {        println!("three");    }    if let Some(8) = some_u8_value {        println!("匹配到了");    }}D:\learn\cargo_learn>cargo run   Compiling cargo_learn v0.1.0 (D:\learn\cargo_learn)    Finished dev [unoptimized + debuginfo] target(s) in 0.27s     Running `target\debug\cargo_learn.exe`匹配到了

相应的如果咱们想要失去一个确切的后果,比方如果没有匹配到咱们须要的那个咱们心愿有返回后果,那么此时能够应用else:

#[derive(Debug)]enum UsState {    Alabama,    Alaska,}enum Coin {    Penny,    Quarter(UsState),}fn main() {    let coin = Coin::Penny;    let mut count = 0;    if let Coin::Quarter(state) = coin {        println!("State quarter from {:?}!", state);    } else {        count += 1;        println!("没有匹配到任何后果, count将主动+1 !!!")    }}D:\learn\cargo_learn>cargo run   Compiling cargo_learn v0.1.0 (D:\learn\cargo_learn)warning: variable `count` is assigned to, but never used  --> src\main.rs:14:9   |14 |     let mut count = 0;   |         ^^^^^^^^^   |   = note: `#[warn(unused_variables)]` on by default   = note: consider using `_count` insteadwarning: value assigned to `count` is never read  --> src\main.rs:18:9   |18 |         count += 1;   |         ^^^^^   |   = note: `#[warn(unused_assignments)]` on by default   = help: maybe it is overwritten before being read?warning: variant is never constructed: `Alabama` --> src\main.rs:3:5  |3 |     Alabama,  |     ^^^^^^^  |  = note: `#[warn(dead_code)]` on by defaultwarning: variant is never constructed: `Alaska` --> src\main.rs:4:5  |4 |     Alaska,  |     ^^^^^^warning: variant is never constructed: `Quarter` --> src\main.rs:9:5  |9 |     Quarter(UsState),  |     ^^^^^^^^^^^^^^^^warning: 5 warnings emitted    Finished dev [unoptimized + debuginfo] target(s) in 0.51s     Running `target\debug\cargo_learn.exe`没有匹配到任何后果, count将主动+1 !!!