为什么Equals [A <:B>:B,B]无法编译(Why Equals[A <: B >: B, B] doesn't compile)
我使用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]没有。
I use case class Equals[A >: B <: B, B] to check type equivalency, e.g.,
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]But when I re-declare the Equals case class as:
scala> case class Equals[A <: B >: B, B] <console>:1: error: ']' expected but '>:' found. case class Equals[A <: B >: B, B]I'd like to know why [A >: B <:B, B] works , but [A <: B >: B, B] doesn't.
最满意答案
根据Scala参考规范项4.4类型参数 :
TypeParam :: =(id |'_')[TypeParamClause] ['>:'Type] ['<:'Type] [':'Type]
绑定序列是A >: Lover <: Upper但不是A <: Upper >: Lover
According to Scala Reference Specification item 4.4 Type Parameters:
TypeParam ::= (id | ‘_’) [TypeParamClause] [‘>:’ Type] [‘<:’ Type] [‘:’ Type]
Bound sequence is A >: Lover <: Upper but not A <: Upper >: Lover
更多推荐
发布评论