跳到主要内容

函数的使用



函数

  • 函数声明

    function 一个函数();

    如果函数没有提前声明,那么它会在实现的位置完成声明。

  • 函数实现

    function 一个函数() {
    // 代码块
    }
  • 函数参数

    函数可以有一个或多个参数,参数之间用逗号隔开。函数的参数和返回值都是运行时值类型变量(EUDVariable)。

    function 打印两个变量值(变量1, 变量2) {
    println("{}, {}", 变量1, 变量2);
    }
  • 函数返回值

    一个函数可以在调用后返回一个或多个值,多个返回值用逗号隔开。

    function 交换(1,2) {
    return2,1;
    }
  • 参数和返回值类型

    函数的参数和返回值可以指定类型。
    在参数名后加上冒号并写上类型名称,即可指定参数类型;运行时会将参数变量的值(作为编号或指针)包装成指定类型。
    在函数声明的参数列表括号后加上冒号并写上类型名称,即可指定返回值类型;运行时会将返回变量的值(作为编号或指针)包装成指定类型。

    function 创建一个新单位(player : TrgPlayer, ut : TrgUnit, loc : TrgLocation) : CUnit, TrgString {
    const cu = CUnit.from_read(EPD(0x628438));
    if (cu == 0) {
    return 0, $T("无法再创建单位");
    }
    CreateUnit(1, ut, loc, player);
    if ( Memory(0x628438, Exactly, cu.ptr) ) {
    return 0, $T("CreateUnit 没能成功创建单位,可能是参数给错或是出口被堵住了");
    }
    return cu, $T("成功");
    }

    function onPluginStart() {
    const cu, err = 创建一个新单位(P1, $U("Terran Marine"), $L("Location 1"));
    if (cu != 0) {
    cu.cgive(P8);
    cu.set_color(P8);
    } else {
    DisplayTextAll(err);
    }
    }
  • 函数调用

    一个函数(); // 直接调用一个没有参数的函数

    var a = 2;
    var b = 3;

    a, b = 交换(a, b); // 传入参数调用一个函数并获取其返回值

    打印两个变量值(a, b); // 传入参数调用一个函数
  • 多个返回值的说明

    函数返回多个值时,实际上返回的是一个编译期 tuple。当不需要获取所有返回值时,可以用选择语法[[]]获取返回 tuple 中的一个或多个值(下标从 0 开始)。
    tuple 是编译期类型,不是运行时数据结构。

    function 有多个返回值的函数() {
    return 1, 2, 3, 4, 5;
    }

    const r1 = 有多个返回值的函数()[[0]];

    const r4, r3 = 有多个返回值的函数()[[4, 3]];

    const r1, r2, r3, r4, r5 = 有多个返回值的函数(); // 当有足够的左值接收多个返回值时,tuple 会自动解包