Inferência
O motor da inferência de tipo é muito inteligente. Ele faz mais do que olhar o tipo da expressão do valor durante uma inicialização. Ele também olha em como a variável é usado mais tarde para inferir o seu tipo. Cá está um exemplo avançado da inferência de tipo:
fn main() { // Por causa da anotação, o compilador sabe que `elem` tem o tipo u8. let elem = 5u8; // Criar um vetor vazio (uma tabela que cresce). let mut vec = Vec::new(); // Neste momento o compilador não sabe o tipo exato de `vec`, // apenas sabe que é um vetor de alguma coisa (`Vec<_>`). // Inserir `elem` no vetor. vec.push(elem); // Aha! Agora o compilador sabe que `vec` é um vetor de `u8` (`Vec<u8>`) // TODO ^ Tente comentar a linha `vec.push(elem)` println!("{:?}", vec); }
Nenhuma anotação de tipo de variáveis foi necessária, o compilador está feliz e consequentemente o programador!