Rustでは、同じ名前の変数を複数回宣言できます。
fn main() {
let a = 10;
println!("{}", a);
let a = 20;
println!("{}", a);
}
1 つめの a と 2 つめの a は、名前は同じですが、別の変数とみなされます。
1 回目の println! では、1番目の a の値が出力され、2 回目の println! では、2番目の a の値が出力されます。
出力は上から 10 20 となります。
ここで注意しなくてはならないのは、同じ名前の変数を宣言すると、それより前に宣言した変数が使えなくなってしまうという事です。
これを変数のシャドーイングと言います。
fn main() {
let a = 10;
{
println!("{}", a);
let a = 20;
println!("{}", a);
}
println!("{}", hoge);
}
上記コードのようにシャドーイングをブロックの中で行うと、ブロックを抜けた後は 2 つめの a が存在しないので、最後の println! では 1 つめの a の値が出力されます。
よって、出力は上から 10 20 10 となります。
