前回の記事で、変数の再宣言についてコメントを頂いたので調べてみました。今回取り扱うテーマは変数(など)の再宣言とシャドウイングです。 はじめに:シャドウイングとは? fn main() { let x: i64 = 1; println!("{}", x); // 1 { let x: i64 = 2; println!("{}", x); // 2 } println!("{}", x); // 1 } シャドウイングとは、ある特定のスコープにおける変数名とその外側のスコープにおける変数名が同名であった時に、その2つを別の変数として扱う挙動です。 上記のrustのコードでは、中括弧で囲われたブロック内のxとその外側のxは別の変数として扱われます。 ここまでは最近の言語だとよくある話です。今回問題にしたいのは以下の場合です。 問題: rustにおける同一スコープ同名変数の再宣言