Scala 2.11 类型差异更改

标签 scala variance implicits

在 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/

相关文章:

scala - Scala 中不可变集合实现的性能

Python - 使用 K-means 聚类。一些方差为零的列

scala - 将其传递给高阶函数后,函数隐式参数不再如此

scala - 如何在 Scala 中表达这种类型?存在类型类(即隐式)限制?

Scala 无形 : derive type from Mapper

scala - Scala、Spark 中 == 和 === 的区别

java - 为什么 ls ~ 或 ls $HOME 在进程中不起作用?

java - 定义和引用在 Play 模板签名中绑定(bind)的泛型类型

typescript - TypeScript 中的方差、协方差、逆变和协方差的区别

r - 在 R 中创建多个偏差方差权衡图