我想定义一个包含可以比较的元素的红黑树,但我似乎无法获得正确的类型。此代码的最后一行“x < data”无法编译:“value < is not a member of type parameter 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