【发布时间】:2018-10-07 18:47:19
【问题描述】:
Martin Odersky mentioned 他们在 dotty 中引入了复合类型和交集类型。在他的幻灯片上,有两张图片代表了新旧类型系统的上限和下限的差异。
这是旧的:
这是新的:
有人能解释一下upper bound for T <: U 的实际含义吗?为什么当前版本的 scala 是无限的?例如,T >: U 会有什么不同。
【问题讨论】:
Martin Odersky mentioned 他们在 dotty 中引入了复合类型和交集类型。在他的幻灯片上,有两张图片代表了新旧类型系统的上限和下限的差异。
这是旧的:
这是新的:
有人能解释一下upper bound for T <: U 的实际含义吗?为什么当前版本的 scala 是无限的?例如,T >: U 会有什么不同。
【问题讨论】:
如果T <: U(即T 是U 的子类型或U 是T 的超类型)则U 是T 的上限而T 是U 的下界。
在 Scala 2 中
T with U <: T
T with U <: U
U with T <: T
U with T <: U
在多蒂中
T & U =:= U & T
T | U =:= U | T
T & U <: T
T & U <: U
T <: T | U
U <: T | U
如果T <: U 那么
T with U =:= T
T & U =:= T
T | U =:= U
如果T >: U 那么U <: T 反之亦然
T with U =:= U
T & U =:= U
T | U =:= T
在 Scala 2 中,如果 T 和 U 来自不同的继承层次结构(或更准确地说,是子类型层次结构),那么最好的说法是
T <: Any
U <: Any
在这个意义上,上限是无限的。
【讨论】:
T | U =:= U。