while let

if letと同様に、while letも不格好なmatch処理を多少マシにしてくれます。例えば、以下のiをインクリメントする処理を見てください。

#![allow(unused)] fn main() { // `optional`という変数の型を`Option<i32>`に指定。 let mut optional = Some(0); // 変数の照合を繰り返し行います。 loop { match optional { // もし`optional`のデストラクトに成功した場合、値に応じて処理を分岐。 Some(i) => { if i > 9 { println!("Greater than 9, quit!"); optional = None; } else { println!("`i` is `{:?}`. Try again.", i); optional = Some(i + 1); } // ^ 3つものインデントが必要。 }, // デストラクトに失敗した場合、ループを脱出。 _ => { break; } // ^ どうしてこんな行を書く必要が?もっと良い方法があるはずです! } } }

while letを使ってすっきり書くことができます。

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

参照

列挙型, Option, RFC