参照渡しのパラメータ (1)
プロシージャ (外部関数を含む) はパラメータを受け取ります。既定値では、パラメータは値によって渡されます。つまりプロシージャは、渡された変数の値を使用できますが、変数の値自体を変更することはできません。例の最初の部分の $$dblbyval は変数 num を使用してそれを 2 倍にしますが、プロシージャの外部の num 変数の値は変化しません。
他の言語と同様、ObjectScript はパラメータを参照によって渡すことができるため、その変数値をプロシージャで変更できます。プロシージャを呼び出す場合は、変数名の先頭にドットを付けます。dblbyref1 プロシージャは num を 2 倍にしますが、これは単にドットが num の前に付いているためです。参照によってプロシージャにパラメータを渡すことができるのは、正確にプロシージャを呼び出し、パラメータの前にドットが付いている場合のみです。dblbyref2 プロシージャは result と呼ばれる新規の変数を作成することによって、num を 2 倍にして返します。
SAMPLES>do ^passbyref
Enter a number: 3
3 doubled is: 6
3 doubled is: 6
6 doubled again is: 12
SAMPLES>
passbyref.mac のコードは以下のとおりです。
passbyref ; passing parameters by value and reference
; pass by value
read !, "Enter a number: ", num
set dblnum = $$dblbyval( num )
write !, num, " doubled is: ", dblnum
; num passed IN and OUT by reference
write !, num
do dblbyref1( .num )
write " doubled is: ", num
; num passed IN by value
; result passed OUT by reference
do dblbyref2(num, .result)
write !, num, " doubled again is: ", result
quit
dblbyval(anynum) PUBLIC
{ quit anynum * 2 }
dblbyref1(anynum) PUBLIC
{ set anynum = anynum * 2
quit }
dblbyref2(anynum, double) PUBLIC
{ set double = anynum * 2
quit }