我想从超类 ( ) 调用子类的构造函数来创建类型(或)Tree[A]
的子类的其他实例。似乎必须有一种方法比创建中间方法的混乱更好,因为工作之类的事情。我听说 CanBuildFrom 可能会解决这个问题。A
Part
Project
newChild
List
从工作代码中提取:
abstract class Tree[A](parent: Option[A], key: Int) {
protected def newChild(aKey: Int): A
lazy val children: List[A] = childrenOf.map(newChild(_))
...
}
case class Part(parent: Option[Part], key: Int) extends Tree[Part](parent, key) {
protected def newChild(aKey: Int) = Part(Some(this), aKey)
...
}
case class Project(parent: Option[Project], key: Int) extends Tree[Project](parent, key) {
protected def newChild(aKey: Int) = Project(Some(this), aKey)
...
}
...
"*" #> <ul>{Part(None, pKey).expandAsHtml}</ul>
为超类中的成员使用 Scala 子类构造函数的更好方法是什么?