TSL语言基础 > TSL语言基础 > 函数定义体和函数

命名参数调用    

  • 功能:调用函数时,通过给指定参数名进行传值,不仅限于通过参数位置去识别。
    多用于数学方法的调用(在定义时可搭配缺省参数的使用)、OFFICE的COM调用以及PYTHON的一些机器学习方法调用中。

    用法:funcName(参数名:参数值,…)
    说明:目前只有NG客户端与下一代测试服务器支持。
    例如:
    function funcA(a,b,c);
    begin
     echo "funcA--","a:",a," b:",b," c:",c;
    end

    执行:funcA(1,c:3);
    打印:funcA--a:1 b:<NIL> c:3

    注意:
    1、在传统传参方式与命名参数传参方式混合使用时:
      a、命名参数方式出现之后,后面所有参数都需用命名参数的方式传入(否则会引发语法报错),命名参数传入参数后就不再考虑参数位置关系,根据参数名对指定参数进行传值。
      b、前面有通过非命名参数方式传过参的参数,后面不可再通过命名参数对该参数再次传参(否则会引发运行时错误,找不到该变量),只能对未赋值过的参数进行传参。即,不能出现重复传参数的情况。

    2、函数体是TSL语言实现的才可用命名参数的方式传入,二进制函数(看不到函数体的)不支持,需要用户重新封装。
    例如:系统函数inttostr(value),由于属于二进制函数,所以不支持inttostr(value:200)方式调用,可以进行如下封装进行转变:
    //封装MM_inttostr(V)调用inttostr来替代它
    Function MM_inttostr(V);
    begin
      return inttostr(v);
    end

    调用:return MM_inttostr(v:200);
    返回:'200'

    3、除了函数的直接调用上支持命名参数的调用外,通过函数名或指针去调用函数或类的成员方法的模型也支持传参时以命名参数的方式进行,例如,call、invokeinarray等。
    例如:有函数testFuc
    Function testFuc(a,b,c);
    begin
      return array(a,b,c);
    end

    调用:return call("testFuc",a:1,c:2,b:3);
    返回结果:array(3,2,1)
    4、在函数存在多态的功能时,比如类成员方法中存在多个同名函数重载的方法时,此时不建议使用命名参数的调用,可能引发不可控的调用问题。