在ActionScript中,我可以在函数声明中使用...
,因此它接受任意参数:
function foo(... args):void { trace(args.length); }
然后我可以调用传递数组的函数:
foo.apply(this, argsArray);
我想使用未知类型和计数的参数调用该函数。这可能在Haxe吗?
答案 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);