我正在尝试为不同但相似类别的对象定义自然排序。在Java中,我将使用Comparable
,看起来在Scala中执行等效的方法是使用Ordered
。我有以下特点:Scala中的有序特征的问题
trait Positioned extends Ordered[Positioned] {
def position: Int = 1
override def compare(that: Positioned): Int = position - that.position
}
我想这个特点适用于多种情况下的类像这样的:
case class Image(id: String,
override val position: Int = 1) extends Positioned
这符合得很好,但在运行时,当我打电话sorted
对这些集合Image
对象,我得到这个错误:
diverging implicit expansion for type scala.math.Ordering[com.myapp.Image]
starting with method $conforms in object Predef
请让我知道这意味着什么和我能做什么来解决它。
也许这与[SI-8541(https://开头issues.scala-lang.org/browse/SI-8541)? – 2014-10-19 02:02:29
我也看到了,很可能。但由于案件有些差异可能很大,我仍然认为我会问。有了Scala的所有编译魔法,我很难找出问题所在。 – Vidya 2014-10-19 02:29:24
顺便说一句,略有偏离主题,但如果有任何溢出的机会,在比较方法中减法是不正确的。返回'position.compare(that.position)'会更安全,速度稍慢。 – Nate 2014-10-21 02:44:06