while let

Semelhante ao if let, while let pode tornar sequências de match embaraçosas mais toleráveis. Considere a seguinte sequência que incrementa i:

#![allow(unused)] fn main() { // Tornar `optional` do tipo `Option<i32>` let mut optional = Some(0); // Tentar repetidamente este teste. loop { match optional { // Se `optional` desestruturar, avalia o bloco. Some(i) => { if i > 9 { println!("Greater than 9, quit!"); optional = None; } else { println!("`i` is `{:?}`. Try again.", i); optional = Some(i + 1); } // ^ Exige 3 indentações! }, // Sair do laço de repetição quando a desestruturação falhar: _ => { break; } // ^ Porquê que isto deveria ser obrigatório? Deve existir um jeito melhor! } } }

O uso de while let torna esta sequência muito mais agradável:

fn main() {
// Tornar `optional` do tipo `Option<i32>`
let mut optional = Some(0);
// Isto lê-se: "enquanto `let` desestruturar `optional`" à
// `Some(i)`, avaliar o bloco (`{}`). Se não `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);
}
// ^ Menos desvio à direita e não exige
// manipular explicitamente o caso de falha.
}
// ^ `if let` tinha cláusulas `else` ou `else if` opcionais adicionais
// `while let` não tem estas.
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Consulte também:

enum, Option, e o RFC