型推論
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}` の実装がありません
}