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関数を使ってください。