我在理解为什么这段代码不起作用时遇到了一些麻烦。我从二叉树部分 (http://aperiodic.net/phil/scala/s-99/) 中的 99 个 Scala 问题中得到它。它看起来对我有效: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 正在构造更多的 Node 对象,并且没有将自己与 Node 类相关联。
任何帮助表示赞赏。
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)
}