特性で定義された抽象値フィールドがあるとします。
trait Base {
val toBeOverride: String
}
case class Impl(other:Int) extends Base {
override val toBeOverride = "some value"
}
toBeOverride
次のように、値をオーバーライドするだけで複製されたインスタンスを簡単に取得できる関数を作成するにはどうすればよいですか。
// copy only available to case class instance
// v does not have method 'copy'
def overrideBaseValue[T <: Base](v: Base) =
v.copy(toBeOverride = "prefix" + v.toBeOverride)
?
編集
Trait
@som-snytt、 aが an と同じではないのと同じように、これは重複しているとは思いませんAbstract Class
。そして、その質問の答えは私を満足させません。以下を参照してください。
@Blaisorblade、はい、それは問題です。各サブ ケース クラスのインスタンスでは、toBeOverride
フィールドは同じであるため、コンストラクターには表示されません。
今のところ、すべての提案はcopy
、各 (!) サブケース クラスでカスタマイズされたメソッドを定義することですが、私の意見では、それは醜く、言語の無能さを示しています。