繁体   English   中英

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

[英]Generics class method taking function parameter of the generic type doesn't work with 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)");
    }
}

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

解决方法:

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

游乐场链接

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM