Scala のOrdered
トレイトは非推奨なので、 を使用する必要がありますOrdering
。BST クラスを書き直して使用しようとしたOrdering
ところ、コンパイル エラーが発生しました。誰でも正しい使用方法Ordering
を説明できますか。Nothing
これが私のコードです:
abstract sealed class Tree[+A: Ordering] {
def value: A
def left: Tree[A]
def right: Tree[A]
def isEmpty: Boolean
/**
* Time - O(1)
* Space - O(1)
*/
def mkTree(v: A, l: Tree[A] = Leaf, r: Tree[A] = Leaf): Tree[A] =
Branch(v, l, r)
/**
* Fails with message.
*/
def fail(s: String): Nothing =
throw new NoSuchElementException(s)
}
case object Leaf extends Tree[Nothing] {
def value: Nothing = fail("Empty tree.")
def left: Tree[Nothing] = fail("Empty tree.")
def right: Tree[Nothing] = fail("Empty tree.")
def isEmpty: Boolean = true
}
case class Branch[A: Ordering](value: A, left: Tree[A], right: Tree[A]) extends Tree[A] {
def isEmpty: Boolean = false
}
コンパイルすると、次のようになりました。
Tree.scala:21: error: No implicit Ordering defined for Nothing.
case object Leaf extends Tree[Nothing] {
^
one error found
私はこのクラスを として書いていましたがabstract class Tree[+A <% Ordered[A]]
、うまくいきました。