【学習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!"),
}
変更後
break を入れる前のmatchのアームは => の後、いずれも末尾が「,」で終わっていたが、
match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
Ordering::Equal => {
println!("You win!");
break;
}
}
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