传递Haxe中任意函数参数的列表

时间:2015-02-07 19:50:09

标签: function arguments haxe

在ActionScript中,我可以在函数声明中使用...,因此它接受任意参数:

function foo(... args):void { trace(args.length); }

然后我可以调用传递数组的函数:

foo.apply(this, argsArray);

我想使用未知类型和计数的参数调用该函数。这可能在Haxe吗?

3 个答案:

答案 0 :(得分:6)

根据Haxe文档,您可以使用Rest argument

  

如果宏的最后一个参数是Array<Expr>类型,则宏接受从该数组中可用的任意数量的额外参数:

import haxe.macro.Expr;

class Main {
  static public function main() {
    myMacro("foo", a, b, c);
  }

  macro static function myMacro(e1:Expr, extra:Array<Expr>) {
    for (e in extra) {
      trace(e);
    }
    return macro null;
  }
}

答案 1 :(得分:4)

您可以使用Reflect.callMethod()

class Test {
    static function main() {
        var console = js.Browser.window.console;
        var fn = console.log;
        Reflect.callMethod(console, fn, [1, 2, "three", [4]]);
    }
}

答案 2 :(得分:2)

Starting with Haxe 4.2,Haxe 将原生支持剩余参数:

function f(...args:Int) {
    for (arg in args) {
        trace(arg);
    }
}

f(1, 2, 3);

...args:Int 只是 rest:haxe.Rest<Int> 的语法糖。只有函数的最后一个参数可以是剩余参数。

您还可以在调用带有 rest 参数的函数时使用 ... 来“扩展”数组:

final array = [1, 2, 3];
f(...array);