Sombreado de variables
Comprensión
En Rust, si una variable (let o let mut) a se declara de nuevo más adelante, este comportamiento se llama shadowing (sombreado).
- Las constantes
constno pueden sombrearse. - El sombreado puede tener alcance de bloque (
{}). - Con el mismo nombre se puede declarar un nuevo tipo de datos.
Fuente
https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html#shadowing
fn main() {
let x = 5;
let x = x + 1;
{
let x = x * 2;
println!("The value of x in the inner scope is: {}", x);
}
println!("The value of x is: {}", x);
}
El programa vincula primero x al valor 5. Después vuelve a declararla con let x = y suma 1, por lo que pasa a valer 6. En un alcance interno, una tercera declaración sombrea x y multiplica el valor por 2, obteniendo 12. Al terminar ese alcance, el sombreado interno desaparece y x vuelve a valer 6.
The value of x in the inner scope is: 12
The value of x is: 6
El sombreado se diferencia de marcar una variable como mut: si intentamos reasignarla sin let, obtenemos un error de compilación. Con let podemos transformar un valor y dejar la variable inmutable después.
Otra diferencia es que podemos cambiar el tipo y conservar el mismo nombre:
let spaces = " ";
let spaces = spaces.len();
La primera variable es una cadena y la segunda, una variable nueva con el mismo nombre, es un número. Con mut esto produce un error porque no se puede cambiar el tipo de una variable:
let mut spaces = " ";
spaces = spaces.len();