抽象基本クラスから継承する2つのケースクラスがあります。継承するケースクラスのコピーメソッドを使用する(したがって、子クラスのインスタンスを返す)抽象基本クラスにいくつかのメソッドを定義したいのですが、自己型を使用してこれを行う方法はありますか?
コード例:
abstract class BaseClass(a: String, b: Int) {
this: case class => //not legal, but I'm looking for something similar
def doubleB(newB: Int) = this.copy(b = b * 2) //doesn't work because BaseClass has no copy
}
case class HasC(a: String, b: Int, c: Boolean) extends BaseClass(a, b) {
def doesStuffWithC(newC: Boolean) = {
...
}
}
case class HasD(a: String, b: Int, D: Double) extends BaseClass(a, b) {
def doesStuffWithD(newD: Double) = {
...
}
}
この質問のおかげで、私が望む結果を得る方法を理解しました: Scalaのこの型付け、抽象型などを使用してSelf型を実装するにはどうすればよいですか? ただし、makeCopyメソッドをBaseClassに追加し、各子ケースクラスでcopyを呼び出すことでオーバーライドする必要があり、構文(特にSelfタイプの場合)はかなり混乱します。Scalaに組み込まれているセルフタイピングでこれを行う方法はありますか?