我是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
我该怎么办?
答案 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
这一切都很困惑。