共通基底から派生する約のクラス階層を定義したいと思います。型は、this oneのようなAST階層内のノードを記述しています。私はの線に沿って何かをしたいと思います:多くのケースクラスを持つクラス階層の共通コピーを定義します
trait Base {
def doCopy: Base
}
trait CloneSelf[T <: CloneSelf[T]] extends Base {
self: T =>
def copy(): T
override def doCopy: T = copy()
}
case class CaseA(a: String) extends Base with CloneSelf[CaseA]
case class CaseB(b: Int) extends Base with CloneSelf[CaseB]
私copy
の存在が自動的にコピーを定義することからcase classes
を防ぐため、これは、エラーになります。 「クローン」を実装する方法はありますかのcase classes
を使用していますか?
これを避けるために階層を設計する方法はいくつかありますが、それでも自動コピーは得られますか? (そしてあなたはこれをやって何が悪いのかを詳しく調べることができますか?) – Suma
"ベースクラッシュに1回の変更を行うと想像してください"。私はIDEを使用しているので、彼の理由を見ることができないか、これを検索して置き換えます。したがって、いくつのクラスが重要ですか。これが邪悪である重大な理由はありますか?基本クラスの通常の変更では、変更を継承するだけで派生クラスの何かを変更する必要はありません。 – Suma
"あなたはすべての子クラスでそれを変更する必要があります"。 。 。またはあなたのIDEがあなたのためにそれをさせる。 – adrice727