【问题标题】:error: too many arguments for method apply creating a Tree错误:方法应用的参数太多创建树
【发布时间】:2016-04-06 01:11:06
【问题描述】:

我正在解决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) 并没有出现这些错误,他的代码也一样,运行良好。

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

【问题讨论】:

    标签: scala tree arguments


    【解决方案1】:

    你会想要使用

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

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

    【讨论】:

    • 现在可以正常编译了。明天我将在课堂上测试它做真实的事情。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多