如何修复“实施特征成员”错误?

时间:2017-10-28 13:55:34

标签: scala

我是Scala的新手,我正在尝试创建一个树,但代码尚未完成。这就是我所做的:

class Tree {

    class TreeNode(val n: Int, val points: Array[Double],
           val center: Double) extends Tree{
    }
    sealed trait Tree {
    def elem : TreeNode
    }

    def buildTree(points: Array[Double], m: Int): Tree = {
      val center = points(Random.nextInt(points.length))
      val root: Tree = new TreeNode(points.length, points, center)

      println("center is : " + center)
      printNode(root.elem)
      root
    }
}

我收到以下错误:

  

类TreeNode必须声明为abstract或实现抽象成员elem

我该怎么办?

2 个答案:

答案 0 :(得分:0)

正如您的错误消息所述,您可以声明该类是抽象的

c("a", "b","a") %>% setdiff("a")

或实施方法

abstract class TreeNode(val n: Int, val points: Array[Double],
                        val center: Double) extends Tree{
}

很抱歉成为明显上尉。

答案 1 :(得分:0)

您发布的代码有点困惑。

sealed trait Tree {
  def elem : TreeNode
}

任何延伸Tree的内容都需要定义我们称之为TreeNode的{​​{1}}。我们不需要在这里定义它,因为这是一个特征。

elem

class TreeNode( . . . ) extends Tree {} 扩展TreeNode,这意味着Tree的每个实例都需要TreeNode类型elem。但我们正在定义TreeNode是什么。我们怎样才能提供与我们定义的相同的东西?我只想到一个解决方案。

TreeNode

现在class TreeNode( . . . ) extends Tree {def elem = this} 的目的是什么? elem的每个实例都有一个成员TreeNode,它只是对自身的引用。如果您有elem TreeNode,那么val tn = new TreeNode(...)就像tn.elem一样。

另外,为什么这都在tn内?这意味着您必须拥有class Tree来构建Tree

Tree#Tree

这一切都很困惑。