InferĂȘncia de Tipo
Rust verĂĄ como a variĂĄvel Ă© usada para determinar o tipo:
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.
Este slide demonstra como o compilador Rust infere tipos com base em restriçÔes dadas por declaraçÔes e usos de variåveis.
Ă muito importante enfatizar que variĂĄveis declaradas assim nĂŁo sĂŁo de um tipo dinĂąmico "qualquer tipo" que possa armazenar quaisquer dados. O cĂłdigo de mĂĄquina gerado por tal declaração Ă© idĂȘntico Ă declaração explĂcita de um tipo. O compilador faz o trabalho para nĂłs e nos ajuda a escrever um cĂłdigo mais conciso.
Quando nada restringe o tipo de um literal inteiro, Rust assume i32
. Isso Ă s vezes aparece como {integer}
nas mensagens de erro. Da mesma forma, os literais de ponto flutuante assumem f64
.
fn main() { let x = 3.14; let y = 20; assert_eq!(x, y); // ERRO: nenhuma implementação para `{float} == {integer}` }