スーパークラス ( ) からサブクラスのコンストラクターを呼び出して、型(または)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 サブクラス コンストラクターを使用するより良い方法は何ですか?