Rust faktycznie pozwala cień inne zmienne w bloku, więc let x: i32 = 565;
jest zdefiniowanie nowy zmienną x
że cienie z x
zdefiniowanego wcześniej z let (x,y) = (1,3);
. Zauważ, że możesz nawet przedefiniować x
, aby mieć inny typ, ponieważ druga x
to zupełnie nowa zmienna!
fn main(){
let x = 1;
println!("Now X is {}",x);
let x = "hi";
println!("Now X is {}",x);
}
Ten numer reddit thread zawiera bardziej szczegółowe informacje na temat tego, dlaczego jest to przydatne. Dwie rzeczy, które są wymienione, które wydają się interesujące są:
W przypadku operacji, które biorą własność zmiennej, ale wracają innej zmiennej tego samego typu, to czasami „ładnie wygląda” przedefiniować zmienną zwrócony mieć Takie samo imię. Od here:
let iter = vec.into_iter();
let iter = modify(iter);
let iter = double(iter);
lub złożyć zmienna niezmienne:
let mut x;
// Code where `x` is mutable
let x = x;
// Code where `x` is immutable
Dlaczego jest to dozwolone w języku? Czy to nie powoduje błędów logicznych w dużym programie? Jaki jest cel shadowingu i czy istnieje jakikolwiek inny język, który korzysta z tej koncepcji? – Viraj
Jak można odwoływać się do poprzednio zacienionej zmiennej? – Dai
@Dai Nie sądzę, że możesz ... Zawsze możesz przekazać własność innej zmiennej 'let y = x'. – Alec