1

我有这样的haxe代码:

var fn:String->Int = function(s:String):Int{
    return 1;
}

getParameterType(fn,1);//Should return String as it is first parameter of fn

函数 getParameterType 代码应该是什么样的?

4

1 回答 1

5

Haxe 反射 API 可以在这里找到:反射类型

纵观它们,似乎没有任何方法可以检查函数的参数类型,可能是因为在许多平台上运行时这些信息不可用。例如,Javascript 是松散类型的,默认情况下不包含您要查找的信息。

所以你有三个选择:

  1. 使用RTTI(运行时类型信息)。如果一个类标记有@:rtti元数据(在 Haxe 3 中,或者如果它implements haxe.rtti.Infos在 Haxe 2 中),则有关该类的信息(包括函数参数的类型)在运行时以 Xml 格式提供。您将不得不查看 Xml 以确定参数是什么。这仅适用于附加到类的函数,但不适用于匿名函数。

  2. 使用宏。这超出了我的回答范围,但如果您需要帮助,可以在 Haxe 邮件列表中询问:) 如果参数类型在编译时已知,则可以将其告知宏,并且您可以将该信息保存回某处所以它在运行时可用。

  3. 找出另一个不需要你知道类型的用法:)

当然,如果您只需要编译时的信息,而不是运行时的信息,您可以这样做:$type(fn)代码中的任何位置,当您编译时,它会让您知道“fn”的确切类型签名。

于 2013-05-28T00:03:14.497 回答