参数默认值涉及类型绑定

时间:2015-09-15 03:25:55

标签: scala

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定义隐式排序。

1 个答案:

答案 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以获取相关帮助。