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
%uA0使该序列好得更多: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&apost require // explicitly handling the failing case. } // ^ `if let` had additional optional `else`/`else if` // clauses. `while let` does not have these. }