تعیین تایپ ضمنی

زبان 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 با توجه به اعلان‌ها و استفاده‌های متغیر، انواع را استنتاج می‌کند.

بسیار مهم است که تاکید کنیم متغیرهایی که به این صورت تعریف می‌شوند از «نوع داده پویای any» نیستند که بتواند هر نوعی باشند. وقتی که ما از تعیین تایپ ضمنی استفاده می‌کنیم در واقع مشابه زمانی هست که نوع داده را به صورت صریح اعلام میکنیم و کد های ماشین آنها دقیقا یکسان هستند. فقط با استفاده از تعیین تایپ ضمنی میتوانید کد ها رو به صورت مختصرتر بنویسیم.

When nothing constrains the type of an integer literal, Rust defaults to i32. This sometimes appears as {integer} in error messages. Similarly, floating-point literals default to f64.

fn main() {
    let x = 3.14;
    let y = 20;
    assert_eq!(x, y);
    // ERROR: no implementation for `{float} == {integer}`
}