Thursday, May 29, 2008

変数のスコープ その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修飾子を使用して値を書き換えても、同一名称のローカル変数へは影響しない

ということがおわかりいただけたかと思います。

 

Thursday, May 29, 2008 10:50:57 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback
Comments are closed.

Theme design by Jelle Druyts

Pick a theme: