let
"вводит / создает новую переменную".
Таким образом, let foo = foo+1;
создает новую переменную с именем "foo", которая живет только внутри l oop. Эта переменная инициализируется как foo+1
, и только «правая сторона foo
» относится к уже существующему foo
.
Таким образом, только «inner-l oop * 1010» * "создан, и внешний foo
не затронут l oop.
Если вы хотите изменить внешний foo
, попробуйте следующее:
let mut foo: i32 = 5; // mut tells rust that variable is going to be modified
for _x in 0..5{
foo = foo+1; // no "let", so not introducing a new variable
}
println!("Value of foo: {}", foo);
С другой стороны, let bar=bar+1
создает новую переменную bar
в той же области видимости, что и предыдущая bar
, поэтому первая bar
затеняется новым bar
и, по сути, более недоступна.