Âmbito e Obscurecimento
Os vínculos de variável têm um âmbito, e são obrigados a viver num bloco. Um bloco é uma coleção de declarações fechadas por chavetas {}
.
fn main() {// Este vínculo vive na função principallet long_lived_binding = 1;// Isto é um bloco, e tem um âmbito mais pequeno do que a função principal{// Este vínculo apenas existe neste blocolet short_lived_binding = 2;println!("inner short: {}", short_lived_binding);}// Fim do bloco// Erro! `short_lived_binding` não existe neste âmbitoprintln!("outer short: {}", short_lived_binding);// FIXME ^ Comente esta linhaprintln!("outer long: {}", long_lived_binding);}
Além disto, obscurecimento de variável é permitido.
fn main() {let shadowed_binding = 1;{println!("before being shadowed: {}", shadowed_binding);// Este vínculo *obscurece* aquela que está no exteriorlet shadowed_binding = "abc";println!("shadowed in inner block: {}", shadowed_binding);}println!("outside inner block: {}", shadowed_binding);// Este vínculo *obscurece* o vínculo anteriorlet shadowed_binding = 2;println!("shadowed in outer block: {}", shadowed_binding);}