型推論
Rustの型推論エンジンはなかなか賢くできています。初期化の際に評価値の型をチェックするだけでなく、その後にどのような使われ方をしているかを見て推論します。以下がその例です。
fn main() { // Because of the annotation, the compiler knows that `elem` has type u8. // アノテーションのおかげで、コンパイラは`elem`がu8型であることがわかる。 let elem = 5u8; // Create an empty vector (a growable array). // 空のベクトル(可変長の配列)を生成 let mut vec = Vec::new(); // At this point the compiler doesn't know the exact type of `vec`, it // just knows that it's a vector of something (`Vec<_>`). // この時点でコンパイラは`vec`の型を知らず、 // 単に何らかの値のベクトル(`Vec<_>`)であるということだけを把握している。 // Insert `elem` in the vector. // `elem`をベクトルに挿入 vec.push(elem); // Aha! Now the compiler knows that `vec` is a vector of `u8`s (`Vec<u8>`) // TODO ^ Try commenting out the `vec.push(elem)` line // よし! これでコンパイラは`vec`が`u8`のベクトル(`Vec<u8>`)であることを把握する。 // TODO ^ 上の `vec.push(elem)` をコメントアウトしてみましょう。 println!("{:?}", vec); }
このように、変数の型アノテーションは必要ありません。これでコンパイラもプログラマもハッピーですね!