ペルソナ、さまざまなソーシャルネットワークの人々を表すケースクラスがあるとします。そのクラスのインスタンスは完全に不変であり、不変のコレクションに保持され、最終的にAkkaアクターによって変更されます。
これで、多くのフィールドを持つケースクラスがあり、次のようなフィールドの1つを更新する必要があることを示すメッセージが表示されます。
case class Persona(serviceName : String,
serviceId : String,
sentMessages : Set[String])
// Somewhere deep in an actor
val newPersona = Persona(existingPersona.serviceName,
existingPersona.serviceId,
existingPersona.sentMessages + newMessage)
変更するのは1つだけですが、すべてのフィールドを指定する必要があることに注意してください。変更されないすべてのフィールドを指定せずに、existingPersonaを複製して1つのフィールドのみを置き換える方法はありますか?これを特性として記述して、すべてのケースクラスに使用できますか?
ペルソナがマップのようなインスタンスである場合、それを行うのは簡単です。