型推論
Rust は、変数がどのように 使われるか を見て型を決定します。
// Copyright 2023 Google LLC // SPDX-License-Identifier: Apache-2.0 fn takes_u32(x: u32) { println!("u32: {x}"); } fn takes_i8(y: i8) { println!("i8: {y}"); } fn main() { let x = 10; let y = 20; takes_u32(x); takes_i8(y); // takes_u32(y); }
このスライドでは、変数宣言とその使用によって与えられる制約に基づいて、Rust コンパイラがどのように型を推論するかを示します。
このように宣言された変数が、あらゆるデータを保持できる何らかの動的な「任意の型」であるわけではないことを、強調するのは非常に重要です。こうした宣言によって生成される機械語コードは、型を明示した宣言によって生成されるものと同一です。コンパイラがその作業を代わりに行ってくれるため、より簡潔なコードを書くことができます。
整数リテラルの型を制約するものが何もない場合、Rust はデフォルトで i32 を使用します。これは、エラーメッセージでは {integer} と表示されることがあります。同様に、浮動小数点リテラルのデフォルトは f64 です。
// Copyright 2023 Google LLC // SPDX-License-Identifier: Apache-2.0 fn main() { let x = 3.14; let y = 20; assert_eq!(x, y); // エラー: `{float} == {integer}` に対する実装がありません }