Escopos e Sobreposição
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}"); }
- Definição: 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.
- A sobreposição parece obscura a princípio, mas é conveniente para manter os valores após
.unwrap()
. - O código a seguir demonstra por que o compilador não pode simplesmente reutilizar locais de memória ao sobrepor uma variável imutável em um escopo, mesmo que o tipo não seja alterado.
fn main() { let a = 1; let b = &a; let a = a + 1; println!("{a} {b}"); }