PowerShellのスコープが好きになれないし、罠にわりとハマっているので、個人的に動きを確認してみた。
ある程度以上の規模のスクリプトを書くにあたって、PowerShellは特に、スコープの意識が絶対必要です。
基本はダイナミックスコープ
PowerShellのスコープはダイナミックスコープ(スタック上、最後の変数宣言を見る)。
普通の言語みたいにレキシカルスコープ(上に辿って一番近くの変数宣言を見る)ではない。
$foo = "FOO" "foo is $foo" # foo is FOO Function Update-foo(){ $foo = "BAR" "foo is $foo" # foo is BAR } Update-foo "foo is $foo" # foo is FOO
まあこれが基本。
ただ、ダイナミックスコープって一言でいうけど、どういうシチュエーションでどう変わるか、確信持てますか?
ダイナミックスコープ七変化
とりあえずどういうスコープで変数が束縛されているのか知るためにいろいろコードのパターン並べてみました。
ちゃんと脳内動作と一致しているか確認してみよう!たぶん一致してないと思うよ!
(僕もいくつかの動作はよく理解できませんでした。いつか学習したい…)
思ったこと
PowerShellがシンプルに見える人は病院いったほうがいいと思う。
パクり元のPerlみたいにmy $lexicalVar; local $dynamicVar;
させてほしい…。