** 内容はSRC2.2.33のものです **
UpVarコマンド
参照可能なサブルーチンの引数のレベルを変更
書式
UpVar
解説
Args関数でサブルーチンの引数を参照する場合、通常はそのサブルーチンに指定された引数のみを参照することができます。しかし、場合によってはそのサブルーチンを呼び出したサブルーチンの引数を直接参照したい場合があります。UpVarコマンドは参照可能なサブルーチンの引数のレベルを変更し、サブルーチンを呼び出したサブルーチンの引数への参照を可能にします。
・UpVarコマンドが引数を持たないサブルーチン内部で呼び出された場合
Args(i)はそのサブルーチンを呼び出したサブルーチンのi番目の引数を参照します。また、システム変数ArgNumはそのサブルーチンを呼び出したサブルーチンの引数の数を返します。
例えばA(1,10)として実行されたサブルーチンA内でサブルーチンBが実行され、そのサブルーチンBの中でUpVarコマンドが呼び出されたとすると、
Args(1) = 1, Args(2) = 10, ArgNum = 2
となります。
・UpVarコマンドが引数を持つサブルーチン内部で呼び出された場合
iがそのサブルーチンの引数の数以下の場合、Args(i)はそのサブルーチンのi番目の引数を参照します。iがそのサブルーチンの引数の数を超えた場合、Args(i)はそのサブルーチンを呼び出したサブルーチンの引数の(i - そのサブルーチンの引数の個数)番目の引数を参照します。ArgNumはそのサブルーチンの引数の個数と、そのサブルーチンを呼び出したサブルーチンの引数の個数の和を返します。
例えばA(1,10)として実行されたサブルーチンA内でサブルーチンBがB(100)として実行され、そのサブルーチンBの中でUpVarコマンドが呼び出されたとすると、
Args(1) = 100, Args(2) = 1, Args(3) = 10, ArgNum = 3
となります。
UpVarコマンドは同じサブルーチン内で複数回実行可能です。この場合、呼び出した回数の分だけ上の階層のサブルーチンの引数が参照できるようになります。
UpVarコマンドを実行して上の階層のサブルーチンの引数を参照可能にした際にその階層のサブルーチンでもUpVarコマンドが実行されていた場合、UpVarコマンドの効果は累計されます。例えばサブルーチン1からサブルーチン2を呼び出し、サブルーチン2からサブルーチン3を呼び出した際にサブルーチン2、3においてそれぞれUpVarコマンドが1回ずつ実行されていたとすると、サブルーチン3からはサブルーチン1~3の引数全てが参照できるようになります。
例
サブルーチンA:
Local wname
#引数からWAVファイル名を検索
wname = GetWavFromArgs()
#WAVファイル名が指定されていればそれを再生
If wname <> "" Then
PlaySound wname
EndIf
#サブルーチンBを呼び出す
Call サブルーチンB
Return
#GetWavFromArgsを実行したサブルーチンの引数からWAVファイル名を検索
GetWavFromArgs:
Local i
#GetWavFromArgsを実行したサブルーチンの引数への参照を可能にする
UpVar
#引数の中から末尾が「.wav」になっている引数を探す
For i = 1 To ArgNum
If LCase(Right(Args(i),4)) = ".wav" Then
Return Args(i)
EndIf
Next
Return