我在Scala中實現一個不可變BST時遇到了一些麻煩。這個問題似乎是由於某些原因,儘管我已經將K
定義爲Ordered[K]
(第二行),但實際上它正在被Scala編譯器考慮爲Any
。爲什麼?在Scala中訂購編譯錯誤
abstract class BST
sealed case class Node[K <: Ordered[K], V](key : K, value : V, left : BST, right : BST) extends BST
sealed case class Empty() extends BST
object BST {
def empty = Empty()
def add[K <: Ordered[K], V](key : K, value : V, tree : BST) : BST = tree match {
case Empty() => new Node(key, value, Empty(), Empty())
case Node(nodeKey, nodeValue, left, right) =>
if (key < nodeKey) new Node(nodeKey, nodeValue, add(key, value, left), right)
else if (key > nodeKey) new Node(nodeKey, nodeValue, left, add(key, value, right))
else new Node(key, value, left, right)
}
嗯?在Java中,我只想說K延伸了Comparable並且沒有混淆。 –