功能目前仅在新一代语言中支持,即天软深圳新节点服务器机群、武汉服务器机群与NG客户端版本的TSL解析器中支持。
范例01:实现doSum(a,b,c,…)多个数据求和的功能
//封装函数
Function doSum(a,...); //…指定不定参数
begin
s:=0;
for i,v in params do
s+=v;
return s;
end;
//调用
return doSum(1,2,3,4);
返回:10
范例02:通过不定个数参数给子函数传参
//封装函数:
Function AAA(a,b,c,d);//展示各参数的值
begin
return (b+c+d)/a;
end;
Function BBB(a,b,...);
begin
c:=a+b;
return AAA(c,...);
end;
//调用
return BBB(1,2,3,4,5);
返回:4
解析:函数中参数的传递按顺序解读,上面示例中即为(3+4+5)/(1+2)最终结果为4。
范例03:不定个数参数在执行不定函数中的应用+ call方式
//封装函数实现统一接口执行含有不同参数的函数
Function doFunc(fc,...); //fc:为函数名或函数指针
begin
return call(fc,...);
end;
//调用如下:
return doFunc("StockName",'SZ000002');//返回:” 万 科A”
return doFunc("FormatFloatExt",101.4567,3);//返回:“101.457”
//或用下面这种调用方式,效果一样:
return doFunc(thisfunction(stockname), 'SZ000002');
范例04:…支持在##方式中调用
注:与范例03的区别在于,##调用必须是函数指针,而非函数名字符串,可通过thisfunction(functioname)方式获取。
//封装函数doFunc2,通过函数指针方式调用函数
Function doFunc2(fc,...); //fc:为函数指针
begin
return ##fc(...);
end;
//调用
return doFunc2(thisfunction(stockname),'SZ000002'); //返回:” 万 科A”
范例05:不定个数参数在类中方法的应用示例
//封装类testC
type testC=class()
public
function fcA(a,b,c);
begin
return a+b+c;
end;
function fcB(a,b,c);
begin
return a$b$c;
end;
function gg(f,...);
begin
if f="Int" then
r:=fcA(...);
else r:=fcB(...);
return r;
end;
end;
//调用:
obj:=new testC();
echo obj.gg("Int",2,20,200);
echo obj.gg("Str",2,20,200);
打印结果为:
222
220200
拓展:不定个数参数…在invoke中的使用示例,在上面示例的基础上,再封装模型设用该类的任意方法,如实现如下:
Function doTestCFuc(fcName,...);
begin
obj:=new testC();
return invoke(obj,fcName,0,...);
//return Invokeinarray(obj,fcName,0,...);
end;
//调用:
return doTestCFuc('gg',"Int",2,20,200);
返回结果为:222