PowerShellのダイナミックスコープについて

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;させてほしい…。