推論

型推論システムはとても賢いです。初期化時の式の値の型だけでなく、 その変数が後でどのように使われるかによって型を推論します。 ここに型推論についての高度な例があります。

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

型の注釈が必要なくなると、コンパイラもプログラマも幸せになれます!