Rustで100本ノック: 配列添え字の型

Rustで100本ノック、本日は39まで完了し、初級編終了です。配列添え字の範囲をチェックしなくて良いという緩い設計のためか、難しいコードにならずに楽です。

ここに来てちょっとハマったのが、入力で添え字番号をもらってその値を出すという問題でした。

// No.035
fn main() {
   let array = [3, 7, 0, 8, 4, 1, 9, 6, 5, 2];
   let number = mylib::get_number_with_prompt("input number: ");
   println!("array[{}] = {}", number, array[number]);

}

はコケます。理由はarray[number]のnumber変数の型です。配列添え字はusizeという型ですが、mylib::get_number_with_prompt()はi32のため、型の不一致が原因ということでした。

numberの値はusizeという事にしてあげないとイケないようですので、

let number = mylib::get_number_with_prompt("input number: ") as usize;

とか

println!("array[{}] = {}", number, array[number as usize]);

と強制変換しないといけないんですね。さすが型に厳しいRust言語。
ベクタでも同様のようです。ベクタで使えるget()ベースにすると、仕方ないけどちょっと面倒。

この記事が気に入ったらサポートをしてみませんか?