Rust by Example

5.2 型推論

Rustの型推論エンジンはなかなか賢くできています。初期化の際に右辺値(r-value)の型をチェックするだけでなく、その後にどのような使われ方をしているかを見て推論します。以下がその例です。

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); }

このように、変数の型アノテーションは必要ありません。これでコンパイラもプログラマもハッピーですね!