Rust while let

while let

類似於if let,while let 可以使勁匹配更多序列。例如考慮以下序列:

// Make `optional` of type `Option

`
let mut optional = Some(0);

// Repeatedly try this test.
loop {
match optional {
// If `optional` destructures, evaluate the block.
Some(i) => {
if i > 9 {
println!("Greater than 9, quit!");
optional = None;
} else {
println!("`i` is `{:?}`. Try again.", i);
optional = Some(i + 1);
}
// ^ Requires 3 indentations!
},
// Quit when the destructure fails, meaning `break`.
_ => { break; }
// ^ Why should this be required? Seems superfluous.
}
}

while let 使該序列好得更多:

fn main() {
// Make `optional` of type `Option

`
let mut optional = Some(0);

// This reads: "while \`let\` destructures \`optional\` into
// \`Some(i)\`, evaluate the block (\`{}\`). Else \`break\`.
while let Some(i) = optional {
    if i > 9 {
        println!("Greater than 9, quit!");
        optional = None;
    } else {
        println!("\`i\` is \`{:?}\`. Try again.", i);
        optional = Some(i + 1);
    }
    // ^ Less rightward drift and doesn't require
    // explicitly handling the failing case.
}
// ^ \`if let\` had additional optional \`else\`/\`else if\`
// clauses. \`while let\` does not have these.

}

也可以參考:

enumOption, 和 RFC