型推論
Rustの型推論エンジンはなかなか賢くできています。初期化の際に評価値の型をチェックするだけでなく、その後にどのような使われ方をしているかを見て推論します。以下がその例です。
fn main() {
// アノテーションのおかげで、コンパイラは`elem`がu8型であることがわかります。
let elem = 5u8;
// 空のベクタ(可変長の配列)を生成。
let mut vec = Vec::new();
// この時点でコンパイラは`vec`の型を知りませんが、
// 何らかの値のベクタ(`Vec<_>`)であるということだけは把握しています。
// `elem`をベクタに挿入。
vec.push(elem);
// よし!これでコンパイラは`vec`が`u8`のベクタ(`Vec<u8>`)
// であることを把握しました。
// TODO ^ 上の`vec.push(elem)`をコメントアウトしてみましょう。
println!("{:?}", vec);
}
このように、変数の型アノテーションは必要ありません。これでコンパイラもプログラマもハッピーですね!