oxd*_*occ 0 types scala 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
Run Code Online (Sandbox Code Playgroud)
定义时member,您包含了一个类型参数T,遮蔽了Tin Tree.由于原始版本T不一定与新版本兼容,因此返回了错误.要解决错误,只需删除成员上的类型参数,如下所示:
... def member(x: T) ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |