変数のスコープ その1では、スクリプトスコープを持つ変数と、関数内で有効なローカル変数について説明しました。
今回は、スクリプトスコープへのアクセスについて説明したいと思います。
その前に前回のおさらいをちょっとだけしたいと思います。
#Scope1.ps1 01 $a = 3 02 03 function Sample1 04 { 05 Write-Host "1)変数`$a=$a" 06 $a = 5 07 Write-Host "2)変数`$a=$a" 08 } 09 10 #関数 sample1を実行 11 Sample1 12 Write-Host "3)変数`$a=$a"
1行目で作成した変数$aはスクリプトスコープを持つ変数となりますが、関数Sample1の6行目でローカル変数$aが作成されるとそれ以降関数Sample1内で$aを参照するとローカル変数である$aを参照することとなります。
これは、関数内ではローカル変数$aが優先されるからであるということは前回説明したとおりです。
ローカル変数$aが優先されている状況下の中で、スクリプトスコープを持つ$aを参照するにはどうすれば良いでしょうか?
これは、script修飾子を使用することで参照が可能になります。
このことを理解するために作成した例を下記に示します。
#Scope2.ps1 01 $a = 3 02 03 function Sample2 04 { 05 Write-Host "1)変数`$a=$a" 06 $a = 5 07 Write-Host "2)変数`$a=$a" 08 Write-Host "3)変数`$a=$script:a" 09 $script:a = 7 10 Write-Host "4)変数`$a=$script:a" 11 Write-Host "5)変数`$a=$a" 12 } 13 14 #関数 sample2を実行 15 Sample2 16 Write-Host "6)変数`$a=$a"
このスクリプトの実行結果は下記の通りです。
PS C:\Work> ./Scope2.ps1 1)変数$a=3 2)変数$a=5 3)変数$a=3 4)変数$a=7 5)変数$a=5 6)変数$a=7
最初に関数Sample2が呼び出され5行目が実行されます。ここで表示される変数はスクリプトスコープを持つ変数$aです。
次に6行目で変数$aに5を代入していますが、これはローカル変数$aとなります。
7行目で表示している変数$aはローカル変数$aです。5が表示されます。
8行目でscript修飾子を使用して、スクリプトスコープを持つ変数$aを表示しています。3が表示されます。
9行目で、スクリプトスコープを持つ変数$aに7を代入します。
10行目で、スクリプトスコープを持つ変数$aを表示します。9行目で書き換えたので7が表示されます。
11行目で、ローカル変数$aを表示します。5が表示されます。途中スクリプトスコープを持つ$aの書き換えを行いましたが影響を受けなかったことがわかります。
16行目で変数$aを表示します。この変数は関数の外なので、スクリプトスコープを持つ変数$aの表示となり7が表示されます。これは関数sample2内でscript修飾子を使用して価を7に書き換えたからです。
以上のことから
・関数内でスクリプトスコープを持つ変数へのアクセスはscript修飾子を使用する
・script修飾子を使用して値を書き換えても、同一名称のローカル変数へは影響しない
ということがおわかりいただけたかと思います。
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