型推論
Rust は、どのように変数が 使用されているか を確認することで、型を判別します。
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); }
This slide should take about 3 minutes.
このスライドは、変数の宣言と使用方法による制約に基づいて、Rust コンパイラが型を推測する仕組みを示しています。
このように宣言された変数は、どのようなデータも保持できる動的な「任意の型」ではない、という点を強調することが非常に重要です。このような宣言によって生成されたマシンコードは、型の明示的な宣言と同一です。コンパイラが代わりに作業を行い、より簡潔なコードの作成を支援します。
整数リテラルの型に制約がない場合、Rust はデフォルトで i32
を使用します。これは、エラー メッセージに {integer}
として表示されることがあります。同様に、浮動小数点リテラルはデフォルトで f64
になります。
fn main() { let x = 3.14; let y = 20; assert_eq!(x, y); // エラー: `{float} == {integer}` の実装がありません }