我在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并且没有混淆。 –