今回はprivateスコープについて説明したいと思います。
#Scope3.ps1 01 $a = 3 02 03 function funcA 04 { 05 Write-Host "2)$a" 06 $a = "7" 07 Write-Host "3)$a" 08 funcB 09 } 10 11 function funcB 12 { 13 Write-Host "4)$a" 14 } 15 16 Write-Host "1)$a" 17 funcA 18 Write-Host "5)$a"
まずは、上記のスクリプトですが、最初にfuncAが呼び出され、funcAの中からfuncBを呼び出すように記述してあります。
このスクリプトの実行結果は下記の通りです。
PS C:\Work> ./Scope3.ps1 1)3 2)3 3)7 4)7 5)3
このスクリプトの動作について図で説明したいと思います。
1行目の変数$aはスクリプトスコープを持つ変数となるので、有効期間は赤線の通りでスクリプトファイルの最後までとなります。
次に6行目の変数$aですが、この変数はローカル変数となりfuncAが有効期間となります。
しかし、funcAからfuncBを呼び出しているため、funcAで作成したローカル変数$aの有効期間は青線で示した箇所となってしますので注意が必要です。
では、funcA内だけで有効なローカル変数を作成した場合にはどうすれば良いでしょうか?
これを実現するにはprivate修飾子を使用します。
下記はScope3.ps1をprivate修飾子を使用したものに書き換えたものです。6行目だけが変更になっています。
#Scope4.ps1 01 $a = 3 02 03 function funcA 04 { 05 Write-Host "2)$a" 06 $script:a = "7" 07 Write-Host "3)$a" 08 funcB 09 } 10 11 function funcB 12 { 13 Write-Host "4)$a" 14 } 15 16 Write-Host "1)$a" 17 funcA 18 Write-Host "5)$a"
PS C:\Work> ./Scope4.ps1 1)3 2)3 3)7 4)3 5)3
下図はScope4.ps1での変数のスコープを表したものです。
private修飾子を使用することで、funcBへは影響を与えなくなることがわかりますね。
Theme design by Jelle Druyts
Pick a theme: BlogXP business calmBlue Candid Blue dasBlog dasblogger DirectionalRedux Discreet Blog Blue Elegante essence Just Html MadsSimple Mobile Mono Movable Radio Blue Movable Radio Heat nautica022 orangeCream Portal Project84 Project84Grass Slate Sound Waves Tricoleur useit.com Voidclass2 BlogXP business calmBlue Candid Blue dasBlog dasblogger DirectionalRedux Discreet Blog Blue Elegante essence Just Html MadsSimple Mobile Mono Movable Radio Blue Movable Radio Heat nautica022 orangeCream Portal Project84 Project84Grass Slate Sound Waves Tricoleur useit.com Voidclass2
Powered by: newtelligence dasBlog 2.0.7226.0
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.
© Copyright 2009, HIRO
E-mail