为什么Scala编译器说逆向类型A出现在类型>中的协变位置:A &l
发布时间:2020-12-16 18:47:18 所属栏目:安全 来源:网络整理
导读:编译器告诉我这不能带有以下警告:“逆变类型A出现在类型中的协变位置:A:任何类型B”警告位于compose方法的type参数中.从逻辑上讲,类型定义对我来说很有意义.如果编译器没有问题,那么为什么问题与converse有关? trait Foo[-A]{ def compose[B : A](t: Foo
编译器告诉我这不能带有以下警告:“逆变类型A出现在类型>中的协变位置:A<:任何类型B”警告位于compose方法的type参数中.从逻辑上讲,类型定义对我来说很有意义.如果编译器没有问题,那么为什么问题与converse有关?
trait Foo[-A]{ def compose[B >: A](t: Foo[B]): Foo[A] = t andThen this def andThen[B <: A](t: Foo[B]): Foo[B] } 我所需要的只是一个破坏的例子.然后我很高兴. 解决方法
如错误所示,您的方差注释是错误的.您不能在返回类型中使用A,这是一个协变位置.想象一下,你在Foo中有另一种方法,它使用A在适当的逆变位置(作为参数):
trait Foo[-A] { ... def foo(a: A): Unit } 现在你可以看到这是如何崩溃的: > Foo [-A]暗示Foo [X]<:Foo [Y]如果X>:Y 因此,对于您编译的示例,A必须是不变的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |