2019-10-14

 プログラムは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

}




0 コメント:

自己紹介

自分の写真
東京都, Japan
憂鬱な凍死家です。こちらではmixiとは異なり固めの話題中心です。

Total Page View

Categories

Powered by Blogger.

Popular Posts

Blog Archive