为什么Equals [A :B,B]无法编译(Why Equals[A : B, B] doesn't compile)

编程入门 行业动态 更新时间:2024-10-18 08:20:11
为什么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

更多推荐

本文发布于:2023-07-26 00:23:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1268388.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Equals   compile

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!