Escopos e Shadowing (Sobreposição)
O escopo de uma variável é limitado ao bloco que a contém.
Você pode sobrepor (shadow) variáveis, tanto aquelas de escopos externos quanto variáveis do mesmo escopo:
fn main() {
let a = 10;
println!("antes: {a}");
{
let a = "olá";
println!("escopo interno: {a}");
let a = true;
println!("sobreposto no escopo interno: {a}");
}
println!("depois: {a}");
}
- Mostre que o escopo de uma variável é limitado adicionando um
bno bloco interno no último exemplo e, em seguida, tentando acessá-lo fora desse bloco. - Shadowing é diferente da mutação, porque após a sobreposição (shadowing), os locais de memória de ambas as variáveis existem ao mesmo tempo. Ambas estão disponíveis com o mesmo nome, dependendo de onde você as usa no código.
- Uma variável sobreposta pode ter um tipo diferente.
- Shadowing (sobreposição) parece obscura a princípio, mas é conveniente para manter os valores após
.unwrap().