error: too many arguments for method apply creating a Tree

error: too many arguments for method apply creating a Tree

我正在解决the 99 Scala problems,但是作者为二叉树表示定义的数据类型有问题:

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)
}

我收到这个错误:

scala> :load tree.scala
Loading tree.scala...
defined class Tree
defined class Node
defined object End
<console>:16: 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)

但是坐在我旁边的一位使用相同 OS (ubuntu 14.04) 和相同版本的 Scala (2.11.8) 的朋友没有得到这些错误和他的代码,是一样的,工作正常。

我是 Scala 的新手,但这对我来说似乎很奇怪。

你会想要使用

def apply[T](value: T): Node[T] = new Node(value, End, End)
//                                ^^^

调用构造函数,而不是再次调用 apply(其签名与三个参数不匹配)。