Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Wnioskowanie typów

Rust sprawdzi, w jaki sposób zmienna jest używana do określenia typu:

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 5 minutes.

Ten slajd pokazuje, w jaki sposób kompilator Rusta wnioskuje o typach na podstawie ograniczeń nałożonych przez deklaracje i zastosowania zmiennych.

Bardzo ważne jest podkreślenie, że zmienne zadeklarowane w ten sposób nie są jakimś dynamicznym „dowolnym typem”, który może przechowywać dowolne dane. Kod maszynowy generowany przez taką deklarację jest identyczny z jawną deklaracją typu. Kompilator wykonuje to za nas i pomaga nam pisać bardziej zwięzły kod.

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}`
}