A
(Part
またはProject
)のサブクラスの追加インスタンスを作成するために、スーパークラス(Tree[A]
)からサブクラスのコンストラクタを呼び出す必要があります。 List
のようなものがあるので、中間メソッドnewChild
を作ることの混乱よりも良い方法がなければならないようです。 CanBuildFromがこの問題に対処するかもしれないと聞いたことがあります。作業コードからスーパークラス内のメンバーにScalaサブクラスコンストラクタを使用するにはどうすればよいですか?
エキス:
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のサブクラスのコンストラクタを使用するより良い方法は何ですか?
そのロジックを反転して、スーパークラスのコンストラクタをサブクラスのコンストラクタから呼び出すべきではありませんか?これはスーパークラスではなく、何をするかを知っているサブクラスです。 – geekosaur
私は混乱しています。このコードはコンパイルされるかどうか?コンパイルすると、どのコードがコンパイルされませんか?エラーメッセージ(コード行と列インジケータを含む完全なエラーメッセージ)は何ですか? –
@DCSは「作業コードから抽出」を追加しました。 –