【学習5日目】loop, break


loop {

}

loopの中に入れる前と後でのmatchの以下の変化が面白かった

変更前


match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
Ordering::Equal => println!("You win!"),
}

変更後


match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
Ordering::Equal => {
println!("You win!");
break;
}
}
break を入れる前のmatchのアームは => の後、いずれも末尾が「,」で終わっていたが、
breakを入れるときに => { } で囲み、末尾に「,」はつけない。

期待された入力とは違うものがタイプされた場合の処理の部分

変更前


let guess: u32 = guess.trim().parse().expect("Please type a number!");

変更後


let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => continue,
};

  • parseがResult型を返すこと
  • ResultがOkとErrの列挙子を持つ列挙型であること
  • Err(_) アンダースコアはすべての値を受け付けます

このErr(_) => continue, でなぜloopの最初に戻れるのかが分からない。
let は変数の定義だと思うが、その中にコマンド(?)を入れられるのがよく分からない。

今日はここまで。
明日はこの guess_numberのコード全体の仕組みを、いまの段階で理解出来るまで読み直す。
分からない部分はメモする。の予定

おまけ
. ←ピリオド period
, ←コンマ comma
: ←コロン colon
;セミコロン semi-colon