if let语句

if let语句是一种特殊的match语句的简写。通常在match只有简单的一两个分支的情况下,用来简写match语句的。

例:以下两个语句块等价。

let v = Some(3);

match v {
    Some(3) => println("three");
    _ => ()
}

该语句等价于。

let v = Some(3);

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

可以看到if let语句被用作变量的比较。

另外,if let语句可以搭配else使用。并且可以解构对象。

enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter(UsState)
}

let coin = Coin::Quarter(UsState::Alaska);
let mut count = 0;

match coin {
    Coin::Quarter(state) => println!("State quarter from {:?}", state),
    _ => count += 1,
}

等价于:

enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter(UsState)
}

let coin = Coin::Quarter(UsState::Alaska);
let mut count = 0;

if let Coin::Quarter(state) = coin {    // 判断,并解构state的值。
    println!("State quarter form {:?}",state);
} else {
    count += 1;
}

最后,if let可以搭配while使用:

loop {
    match option {  // 若option变量可以匹配Some,则一直循环。
        Some(x) => println!("{}", x),
        _ => break,
    }
}

等价于:

while let Some(x) = option {  // 若option变量可以匹配Some,则一直循环。
    println!("{}", x);
}

简单总结一下:

  • if let是一个简单的判断语句
  • if let可以对类型对象进行解构。
  • if let语句等价于match。
  • if let可以搭配else子句。if let ... else ...
  • if let可以搭配while语句。while if let ... { ... }

results matching ""

    No results matching ""