Rust③ 数字当てゲーム2
match式
use std::cmp::Ordering; match guess.cmp(&secret_number) { Ordering::Less => println!("Too small!"), Ordering::Greater => println!("Too big!"), Ordering::Equal => println!("You win!"), }
cmpメソッドはguess変数とsecret_number変数を比較し、返ってきたOrderringの列挙子に基づき動作する。
例 guess = 50 secret_number = 30の時、cmpメソッドは Ordering::Greaterを返し、 Ordering::Lessから一行ずつ順番にマッチするものを探し、マッチしたら=>のコードが動作する。
let guess: u32 = match guess.trim().parse() { Ok(num) => num, Err(_) => continue, };
u32は32ビットの非負整数。
trimは両端の空白を削除するString型のメソッド。
parseメソッドは文字列から数値に変換できた時、Okを返す。Okの場合、一行目のOk(num)にマッチし、=>のnumを返す。 その値が新しく生成したguessに格納される。
そうでない場合、Err(_)にマッチする。この_は、包括値で、この例では保持している情報がどんなものでもいいから全てのErr値にマッチさせたいと言う意味。coutinueはループ処理の次のステップに移すコード。
loop 繰り返し
loop { println!("Please input your guess."); // --snip-- match guess.cmp(&secret_number) { Ordering::Less => println!("Too small!"), Ordering::Greater => println!("Too big!"), Ordering::Equal => { println!("You win!"), break; } } }
breakでループから抜け出せる。