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



我遇到了一个对我来说似乎很奇怪的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);
}

游乐场链接。

最新更新