我有些困惑为什么这段代码不能运行。我是在二叉树部分从99个Scala问题(http://aperiodic.net/phil/scala/s-99/)中得到的。在我看来,它是有效的:Node对象是Node类的伴生对象,并为树上的叶子节点添加了一个构造函数。但是当我尝试编译它时,我得到以下错误:
<console>:10: error: too many arguments for method apply: (value: T)Node[T] in object Node
def apply[T](value: T): Node[T] = Node(value, End, End)
如果我去掉两端,就不会有任何编译错误,但如果我用一个单值来创建一个节点,我会陷入无限循环。因此看起来 apply 正在构造更多的节点对象,并且没有与节点类关联起来。任何帮助都将不胜感激。
sealed abstract class Tree[+T]
case class Node[+T](value: T, left: Tree[T], right: Tree[T]) extends Tree[T] {
override def toString = "T(" + value.toString + " " + left.toString + " " + right.toString + ")"
}
case object End extends Tree[Nothing] {
override def toString = "."
}
object Node {
def apply[T](value: T): Node[T] = Node(value, End, End)
}