我正在解决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很新,但这对我来说似乎很奇怪。
答案 0 :(得分:1)
你想要使用
def apply[T](value: T): Node[T] = new Node(value, End, End)
// ^^^
再次调用构造函数,而不是apply
(其签名与三个参数不匹配)。