型推論

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

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