0

比較可能な要素を含む赤黒ツリーを定義したいのですが、型を正しく取得できないようです。このコードの最後の行 "x < データ" はコンパイルに失敗します: "値 < は型パラメーター 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
4

1 に答える 1

5

を定義したときmember、型パラメーターを含めて、 inTをシャドーイングしました。オリジナルは必ずしも新しいものと互換性があるとは限らないため、エラーが返されました。エラーを解決するには、メンバーの型パラメーターを次のように削除します。TTreeT

... def member(x: T) ...
于 2012-12-17T03:49:06.267 に答える