UWSCで可変引数を扱う(修正版)

以前、このような記事を書いた。
UWSCで可変引数を扱う - じゅんじゅんのきまぐれ
しかし、、、欠陥があることに今頃気づいた。
ScriptControlのRunメソッドに16個以上のパラメーターを渡すとエラーになるのです、、、。
やはり最大は固定しかない、というのが現在の結論。
ということで、ようは配列変数を受け入れるのですが、呼び出しが面倒にならない工夫です。
関数の引数は100個でも大丈夫だったので、書いてて足りなくなったら、随時追加で良いでしょう。



スクリプト

OPTION EXPLICIT

IFB GET_UWSC_NAME = "VariableArguments.uws" THEN
	DIM test = 56
	vprintf(args())
	vprintf(args("めっせーじ", test, 17, "b", 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16))
	vprintf(argsn())
	vprintf(argsn(16, "めっせーじ", test, 17, "b", 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16))
ENDIF

PROCEDURE vprintf(args)
	PRINT LENGTH(args)
	DIM i
	IF LENGTH(args) THEN args[0] = "書き換えた"
	FOR i = 0 TO LENGTH(args) - 1
		PRINT "<#TAB>" + args[i]
	NEXT
FEND


CONST | = EMPTY

FUNCTION args(p0=|,p1=|,p2=|,p3=|,p4=|,p5=|,p6=|,p7=|,p8=|,p9=|,p10=|,p11=|,p12=|,p13=|,p14=|,p15=|,p16=|,p17=|)
	DIM n = 0
	RESULT = SAFEARRAY(0, 99)	// p?の最大数以上であること
	RESULT[0] = p0
	WHILE RESULT[n] <> |
		n = n + 1
		RESULT[n] = EVAL("p" + n)
	WEND
	RESIZE(RESULT, n - 1)
FEND

FUNCTION argsn(n=0,p0=0,p1=0,p2=0,p3=0,p4=0,p5=0,p6=0,p7=0,p8=0,p9=0,p10=0,p11=0,p12=0,p13=0,p14=0,p15=0,p16=0,p17=0)
	DIM i
	RESULT = SAFEARRAY(0, n - 1)
	FOR i = 0 TO n - 1
		RESULT[i] = EVAL("p" + i)
	NEXT
FEND

関数の引数に使用しない値が決まっているなら、args関数を呼び出せばOK。
使用しない値は、CONST |に定義しておいてください。
("$$$aaa$$$"という文字列を使わないなら「CONST | = "$$$aaa$$$"」で良いです)
上記例では、「EMPTY」値は使わないものとしています。
引数の数は必ず最大より1以上多く定義してください。(エラーになります)


使用しない値を決められないなら、個数指定版のargsn関数を使ってください。