为什么等于[A<:B>:B,B]没有编译

时间:2014-04-02 06:23:10

标签: scala type-systems

我使用case class Equals[A >: B <: B, B]来检查类型等价,例如,

scala> Equals[Int, Int] 
res0: Equals[Int,Int] = Equals()

scala> Equals[Int, String]
<console>:10: error: type arguments [Int,String] do not conform to method apply's type parameter bounds [A >: B <: B,B]
              Equals[Int, String]

但是当我将Equals案例类重新声明为:

scala> case class Equals[A <: B >: B, B]
<console>:1: error: ']' expected but '>:' found.
     case class Equals[A <: B >: B, B]

我想知道为什么[A >: B <:B, B]有效,但[A <: B >: B, B]没有。

1 个答案:

答案 0 :(得分:0)

根据Scala Reference Specification 4.4类型参数

  

TypeParam :: =(id |'_')[TypeParamClause] ['&gt;:'Type] ['&lt;:'Type]   [':'类型]

绑定序列为A >: Lover <: Upper,但不是A <: Upper >: Lover