2014-04-02 52 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

相關問題