如何确定函数在Haxe中接受的参数数量?
我看过Reflect和Type API都没有成功。在AS3和JavaScript中,您可以执行Function#length
。对于大多数(即使不是全部)其他Haxe目标,也可以使用类似的反射能力。结合Haxe的详细类型系统,必须有一种方法来确定我忽略的函数的参数数量。
最佳答案
我最终走了宏观路线,这就是我的想法。
import haxe.macro.Context;
import haxe.macro.Type;
import haxe.macro.Expr;
class Main {
static function main() {
function test1(a, b, c) {}
function test2() {}
trace(numberOfArgs(test1)); // 3
trace(numberOfArgs(test2)); // 0
trace(numberOfArgs(function test3(a, b) {})); // 2
trace(numberOfArgs('test')); // null
}
macro static function numberOfArgs(f:Expr):ExprOf<Null<Int>> {
var fType:Type = Context.typeof(f);
if (Reflect.hasField(fType, 'args')) {
var fArgs:Array<Dynamic> = Reflect.field(fType, 'args');
return macro $v{fArgs[0].length};
} else {
return macro null;
}
}
}
关于function - 如何确定函数在Haxe中接受的参数数量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31890828/