Typinferenz
Rust wird sich ansehen, wie die Variable benutzt wird, um den Typ zu bestimmen:
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); }
Diese Folie zeigt, wie der Rust-Compiler Typen basierend auf EinschrÀnkungen ableitet, die durch Variablendeklarationen und Verwendungen gegeben sind.
Es ist sehr wichtig zu betonen, dass auf diese Weise deklarierte Variablen nicht von einem dynamischem "beliebigen Typ" sind, der beliebige Daten enthalten kann. Der durch eine solche Deklaration erzeugte Maschinencode ist identisch mit der expliziten Deklaration eines Typs. Der Compiler erledigt lediglich die Arbeit fĂŒr uns und hilft uns prĂ€gnanteren Code zu schreiben.
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}` }