子スコープから親スコープの変数の参照は可能。
下の関数のように、親スコープの変数を引数にしなくても子スコープで、参照できるが、ちゃんと引数渡しにしたほうが、明示的になり古い型のプログラマーである さえないオジサン 的にはわかりやすい。
変数を子スコープで変更して親スコープに戻すには、funcA2の様にreturnで返すのが、基本だが、変数を同時に2,3こ関数内で処理をしたい時など、子スコープの値を親スコープに返す時には、
funcC2の「$global:cnt」の様に、変数ごとにスコープ指定をすればいいのだが、かなり面倒くさい。
「global」しか使ったことなかったけど、調べると他にもあった。
global ・・・ 全体
script ・・・ スクリプト
local ・・・ 現在のスコープとその子スコープで有効
private ・・・ 現在のスコープ内
さらに、調べると、関数の呼び出しに「.」を付けると同じ結果になることも書いてあった。
funcBの2回目の呼び出
# SampleSource
function funcA1($cnt)
{
$cnt++
}
function funcA2($cnt)
{
$cnt++
return $cnt
}
function funcB($cnt)
{
$cnt++
}
function funcC1($cnt)
{
$cnt++
}
function funcC2($cnt)
{
$global:cnt++
}
$cnt=0
funcA1 $cnt
Write-Debug "After funcA1 = [$cnt]"
$cnt = funcA2 $cnt
Write-Debug "After funcA2 = [$cnt]"
$cnt=0
funcB
Write-Debug "After funcB = [$cnt]"
. funcB
Write-Debug "After funcB = [$cnt]"
$cnt=0
funcC1
Write-Debug "After funcC1 = [$cnt]"
funcC2
Write-Debug "After funcC2= [$cnt]"
# 実行結果
デバッグ: After funcA1 = [0]
デバッグ: After funcA2 = [1]
デバッグ: After funcB = [0]
デバッグ: After funcB = [1]
デバッグ: After funcC1 = [0]
デバッグ: After funcC2= [1]
本日の河上選手:戸田 2日目
2R 5号艇 ピンで6000円
7R 6号艇 2着で4000円
どちらのレースも最近下手な頑張りをするのでBOXで買ったが、2Rは相手が違った。
それにしても、万舟にならないとは!