使用泛型类型的函数参数的泛型类方法不适用于Void

时间:2014-11-20 15:55:23

标签: generics haxe

我遇到了Haxe问题,这对我来说真的很奇怪..这是一个错误吗?

使用将泛型类型的函数作为参数的方法创建泛型类时,我会得到奇怪的错误

无效 - > Void应该是(Void) - >空隙

当泛型类型为Void

如果泛型类型是Int,它可以正常工作。

有没有人有任何想法可以修复或解决这个问题?

Playground link

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)");
    }
}

3 个答案:

答案 0 :(得分:0)

我不确定这是一个错误,它可能与Type系统在Haxe中的工作方式有关。在任何情况下,您可以使用的一种解决方法是简单地使用一个函数,其中参数显式为Void->Void,并在必要时在类的其他函数中使用参数化类型T

答案 1 :(得分:0)

解决方法:

static public function main() {
    test2.test(cast passedFunc);
}

Playground link

答案 2 :(得分:0)

您可以将类型推断欺骗到几乎忽略缺少的参数,如下所示:

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)");
    }
}