【问题标题】:Lower bound and upper bound types for scala and dottyscala 和 dotty 的下限和上限类型
【发布时间】:2018-10-07 18:47:19
【问题描述】:

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

这是旧的:

这是新的:

有人能解释一下upper bound for T <: U 的实际含义吗?为什么当前版本的 scala 是无限的?例如,T >: U 会有什么不同。

【问题讨论】:

    标签: scala generics


    【解决方案1】:

    如果T <: U(即TU 的子类型或UT 的超类型)则UT上限TU下界

    在 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 &lt;: U 那么

    T with U =:= T
    T & U =:= T
    T | U =:= U
    

    如果T &gt;: U 那么U &lt;: T 反之亦然

    T with U =:= U
    T & U =:= U
    T | U =:= T
    

    在 Scala 2 中,如果 TU 来自不同的继承层次结构(或更准确地说,是子类型层次结构),那么最好的说法是

    T <: Any
    U <: Any
    

    在这个意义上,上限是无限的。

    【讨论】:

    • 但是如果 "T <: u t>
    • 在我的回答中,我不假设 T <: u t martin>
    • 如果 T <: u>T with U =:= U with T =:= T & U =:= T, T | U =:= U
    • 如果 T 和 U 是两个任意类型,则 T & U 是 T 和 U 的最大下限,T | U 是 T 和 U 的最小上限。
    猜你喜欢
    • 2015-10-15
    • 2011-11-15
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多