Scala和Dotty的下限和上限类型

时间:2018-10-07 09:21:49

标签: scala generics

Martin Odersky mentioned称他们在点子中引入了复合和交叉点类型。在他的幻灯片上,有两张图片分别代表了新旧系统上下限的差异。

这是旧的:

enter image description here

这是新的:

enter image description here

有人可以解释upper boundT <: U的实际含义吗?为什么对于当前版本的scala无限大?例如,T >: U会有什么不同。

1 个答案:

答案 0 :(得分:1)

如果T <: U(即TU的子类型或UT的超类型),则U是< TT的strong>上限是U下限

在Scala 2中

T with U <: T
T with U <: U
U with T <: T
U with T <: U

在Dotty中

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中,如果TU来自不同的继承层次结构(或更确切地说,是子类型化层次结构),那么最好的说法就是

T <: Any
U <: Any

从这个意义上说,上限是无限的。