Â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 principal let 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 bloco let short_lived_binding = 2; println!("inner short: {}", short_lived_binding); } // Fim do bloco // Erro! `short_lived_binding` não existe neste âmbito println!("outer short: {}", short_lived_binding); // FIXME ^ Comente esta linha println!("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 exterior let shadowed_binding = "abc"; println!("shadowed in inner block: {}", shadowed_binding); } println!("outside inner block: {}", shadowed_binding); // Este vínculo *obscurece* o vínculo anterior let shadowed_binding = 2; println!("shadowed in outer block: {}", shadowed_binding); }