如何确定函数在Haxe中接受的参数数量?

炸药

如何确定函数在Haxe中接受的参数数量?

我看过ReflectType API都没有成功。AS3JavaScript中,您可以执行此操作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;
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章