sealed abstract class Node[Index: Ordering](var children: TreeMap[Index, Node[Index]],
val idx: Index = null)
case class NotLeaf[Index: Ordering](override var children: TreeMap[Index, Node[Index]] = TreeMap.empty[Index, Node[Index]],
override val idx: Index = null) extends Node(children, idx)
object TrieTree {
def main(args: Array[String]) {
val root: Node[Char] = NotLeaf[Char]()
}
}
为什么不能编译?它说: 没有为Index定义隐式排序。
答案 0 :(得分:2)
语法Node[Index: Ordering]
告诉编译器在范围内找到隐式Ordering[Index]
。由于它找不到,你的程序无法编译。
[A: B]
语法实际上是语法糖。你的Node类被这样对待:
sealed abstract class Node[Index](var children: TreeMap[Index, Node[Index]], val idx: Index = null)(implicit o: Ordering[Index])
注意编译器如何在构造函数参数的末尾添加隐式参数。
然后,解决方案是您定义自己的implicit val indexOrdering: Ordering[Index] = ???
。请参阅the scaladocs for Ordering以获取相关帮助。