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
となります。