Scala:如何指定集合包含有序元素?

时间:2012-12-17 03:09:00

标签: scala types red-black-tree

我想定义一个红黑树,其中包含可以比较的元素,但我似乎无法使类型正确。此代码“x< data”的最后一行无法编译:“value<不是类型参数T的成员”。有没有规范的方法来做到这一点?我还看到了一些例子,其中传递了一个隐式参数来进行从T到Ordered [T]的转换,但是我无法在这段代码中编译它。

object Color extends Enumeration {
  val Red, Black = Value
}

abstract class RedblackTree[+T <: Ordered[T]] {
  def isEmpty: Boolean
  def member[T](x: T): Boolean
}

case object Empty extends RedblackTree[Nothing] {
  override def isEmpty = true
  override def member[T](x: T) = false
}

final case class Tree[T <: Ordered[T]](
    color: Color.Value,
    leftSubTree: RedblackTree[T],
    data: T,
    rightSubTree: RedblackTree[T]
    ) extends RedblackTree[T] {
  override def isEmpty = false
  override def member[T](x: T) = x < data

1 个答案:

答案 0 :(得分:5)

定义member后,您添加了一个类型参数T,并隐藏了T中的Tree。 由于原始T不一定与新版本兼容,因此返回了错误。 要解决错误,只需删除成员上的类型参数,如下所示:

... def member(x: T) ...