在 Scala 2.10.4 中编译:
trait Foo[-U,T]{
type Contra = U
}
但在 2.11.0 中同样失败:
contravariant type U occurs in invariant position in type U of type Contra trait Foo[-U,T] {type Contra = U}
有可用的解决方法吗?尝试将 Scala 库移植到 2.11 并且需要逆变类型才能获得编译器拾取的大量隐式定义(即使 U 不变似乎不是一种选择)。
谢谢
最佳答案
我无法想象有可用的解决方法。我说这一切的原因都是为了支持依赖路径的类型:
def foo[T <: Foo[A,B]](that: T): that.Contra
其中放置了
Contra
输入错误的位置。您不能作为操作的结果返回逆变类型。也许这些搜索和验证需要大量工作,以至于编译器作者认为这个小案例造成了太多负担,或者它是您发现的编译器错误。顺便说一下,这只是我的疯狂猜测。我必须阅读编译器代码才能确定哪种方式。
关于Scala 2.11 类型差异更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23384760/