プログラムはN-BasicとZ80のアセンブラしか判りません。
そこでPowershellでログ管理のプログラムを作成していた時に変数のスコープではまったので備忘録。
N-Basicでは変数はプログラムのどこでも同様の働きをするし、同一のものとして扱われる。しかしながら、Powershellでは動きが異なる。
例えば以下の様に、変数Switchを$TRUEとして、この変数を$FALSEへ切り替える場合を考えてみよう。
ここで、N-Basic的にはサブルーチンの様な、functionであるChangeSwitchを呼び出せば変数Switchが$Falseに切替できると思うのだが、挙動は異なる。
冒頭の変数Switchとfunctionの中にある変数Switchは同じ名称でも異なるものなってしまうのだ。
functionの中にある変数Switchはfunction内だけで有効な変数なので、functionから抜けた時にはfunctionの中の変更は反映されない。
[Param](
[Boolean]$Switch = $TRUE
)
function ChangeSwitch{
$Switch = $FALSE
}
それではどうするのか?
以下の様に 変数のスコープを明示的にスクリプト内に指定する。
[Param](
[Boolean]$Switch = $TRUE
)
function ChangeSwitch{
$Script:Switch = $FALSE
}
2019-10-14
登録:
コメントの投稿 (Atom)
0 コメント:
コメントを投稿