斯卡拉隐式排序
发布时间:2020-12-16 09:02:48 所属栏目:安全 来源:网络整理
导读:有没有办法为两个不同的类定义相同的隐式排序? 我尝试沿着以下几行做某事,但它没有检测到排序. abstract class Commoncase class A extends Commoncase class B extends Commonimplicit val KeyOrdering = new Ordering[Common] { override def compare(x:
有没有办法为两个不同的类定义相同的隐式排序?
我尝试沿着以下几行做某事,但它没有检测到排序. abstract class Common case class A extends Common case class B extends Common implicit val KeyOrdering = new Ordering[Common] { override def compare(x: Common,y: Common): Int = { x.toString.compareTo(y.toString) } } 解决方法
正如@ntn所指出的,列表的推断类型 – 它的两个元素的最小上限 – 是带有Commonizable的Serializable.由于scala.Ordering在其类型参数上没有逆变,因此隐式解析失败,因为它不符合Ordering [Common]< ;: Ordering [Product with Serializable with Common].
您可以通过编写隐式排序来解决此问题,以便始终具有所考虑的隐式参数的确切类型: abstract class Common case class A() extends Common case class B() extends Common object Common { implicit def ordering[A <: Common]: Ordering[A] = new Ordering[A] { override def compare(x: A,y: A): Int = { x.toString.compareTo(y.toString) } } } 或者简洁: object Common { implicit def ordering[A <: Common]: Ordering[A] = Ordering.by(_.toString) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |