我遇到了一个对我来说似乎很奇怪的Haxe问题。这是一个错误吗?
当使用将泛型类型的函数作为参数的方法创建泛型类时,我得到奇怪的错误
空 -> 空应该是(空)-> 虚空
当泛型类型为 Void 时
如果泛型类型为 Int,则工作正常。
有没有人有任何想法来解决这个问题或解决这个问题?
游乐场链接
class Test {
static var test2:Test2<Void> = new Test2<Void>();
static public function main() {
test2.test(passedFunc);
}
static function passedFunc():Void {
trace("passedFunc");
}
}
class Test2<T> {
public function new():Void {}
public function test(func: T->Void) {
trace("Test2.testFunc(T)");
}
}
您可以欺骗类型推断以几乎忽略缺少的参数,如下所示:
class Test {
static var test2 = new Test2();
static public function main() {
test2.test(passedFunc);
}
static function passedFunc(?unused):Void {
trace("passedFunc");
}
}
class Test2<T> {
public function new():Void {}
public function test(func: T->Void) {
trace("Test2.testFunc(T)");
}
}
我不确定这是一个错误,它可能只是与 Type 系统在 Haxe 中的工作方式有关。 在任何情况下,您可以使用的一种解决方法是简单地拥有一个函数,其中参数是显式类型的Void->Void
,并在必要时在类的其他函数中使用参数化类型T
。
解决方法:
static public function main() {
test2.test(cast passedFunc);
}
游乐场链接。