これは大きな問題です。そして、それはそれを行う方法があることが判明!
基本的に、__arguments__
は、フラッシュターゲット上の特別な識別子で、主に特別なローカル変数arguments
にアクセスするために使用されます。しかし、メソッドシグネチャでも使用できます。この場合、出力はtest(args: *)
からtest(...__arguments__)
に変更されます。
簡単な例(live on Try Haxe):
class Test {
static function test(__arguments__:Array<Int>)
{
return 'arguments were: ${__arguments__.join(", ")}';
}
static function main():Void
{
// the haxe typed way
trace(test([1]));
trace(test([1,2]));
trace(test([1,2,3]));
// using varargs within haxe code as well
// actually, just `var testm:Dynamic = test` would have worked, but let's not add more hacks here
var testm = Reflect.makeVarArgs(cast test); // cast needed because Array<Int> != Array<Dynamic>
trace(testm([1]));
trace(testm([1,2]));
trace(testm([1,2,3]));
}
}
は最も重要なのは、これは以下を生成します。
static protected function test(...__arguments__) : String {
return "arguments were: " + __arguments__.join(", ");
}