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

标签 function reflection 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;
        }
    }
}

关于function - 如何确定 Haxe 中函数接受的参数数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31890828/

相关文章:

haxe - 在 HaxeFlixel 中编码 Assets 的最佳解决方案

c++ - 带有 “auto”或模板类型推导的功能: “no matching function for call to…”

java - Hecl 脚本是否与 native J2ME midlet 一样强大?

javascript - MVC : Calling Javascript function in View without any HTML control

c# - 在程序集中搜索所有子类型?

java - 通过反射调用可变参数方法

code-coverage - Haxe 中的代码覆盖率

android - Haxe 和 Kivy 的优缺点

python - 如何在python中制作函数列表?

c - strlen 没有产生正确的数字并且 strncpy 不起作用