2014-04-02 84 views
0

我用case class Equals[A >: B <: B, B]检查类型等价,例如,为什么的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] 

但是,当我重新申报等号案例类为:

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]没有。

+0

它看起来像在第一种情况下,编译器只是忽略'B <:B'部分...... – Ashalynd

回答

0

根据Scala Reference Specification4.4类型参数

TypeParam :: =(ID | '_')[TypeParamClause] [ '>:' 类型] [ '<:' 类型] [ “:”类型]

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

相关问题