错误:方法的参数太多,无法创建树

时间:2016-04-05 17:02:25

标签: scala tree arguments

我正在解决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)

但是一个坐在我旁边的朋友使用相同的操作系统(ubuntu 14.04)和相同版本的Scala(2.11.8)并没有得到这些错误,他的代码也是如此,工作得很好。 / p>

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

1 个答案:

答案 0 :(得分:1)

你想要使用

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

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