OUT以外の手段で、と言うことでしょうか?
できないこともないです。
以下のようにして、配列の参照を渡すことができます。
以下では、関数の中で配列の中身を読みだすだけですが、配列の中身を書き換えることも、もちろんできます。
DEF SUM(A)
VAR I,S=0
FOR I=0 TO LEN(A)-1:S=S+A[I]:NEXT I
RETURN S
END
DIM N[10]
FOR I=0 TO 9:N[I]=I+1:NEXT I
?"1カラ10ノゴウケイハ ";:?SUM(N)
レスポンスが遅くて恐縮です。
配列は関数に対し値渡しができないかどうかですが、おそらく既にお気づきのとおり、そんなことはありません。
R=FUNC(N[5])のように、普通に添え字をつけてやれば、値を渡せます。
ただ、配列ではない普通の変数や、添え字で要素を指定した配列変数は、値の「受け」と「渡し」を同じところでは行えません(多分)
値を「渡す」ときは
R=FUNC(N)
のようにしますが、値を「受ける」ときは
COMM OUT N
のように「OUT」を使います。
訊かれていることと違うことを回答していたら、ご容赦ください。
配列そのものは、強制参照渡しで合ってるかなと思います。
可変引数ですが、どのユーザ定義関数も使う時に引数を省略することは出来ます。
TEKIPUT 10,,"S"
みたいに。
でも関数の中で省略された変数に普通に触れるとエラーで止まります使えねえ!(´°Д°`)
一応、SPOFSのZ座標みたいに公式命令で引数を省略してもエラーにならず、省略されたかどうか後で確認できる命令を利用すると、引数が空かどうか調べられます。
DEF FUNC A
SPOFS 255,0,0,-99;SPOFS 255,0,0,A'使わないスプライト
SPOFS 255 OUT X,Y,Z
IF Z==-99 THEN
Aは空
ENDIF
END
Aがたまたま初期値と同じ可能性もあるので、本当は2回チェックが要ります。