ペルソナ、つまりさまざまなソーシャル ネットワーク上の人々を表すケース クラスがあるとします。そのクラスのインスタンスは完全に不変であり、不変コレクションに保持され、最終的には 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 つのフィールドのみを置き換える方法はありますか? これを特性として記述し、すべてのケース クラスで使用できますか?
ペルソナがマップのようなインスタンスであれば、簡単に実行できます。
ベストアンサー1
case class
copy
まさにこの用途に特化したメソッドが付属しています:
val newPersona = existingPersona.copy(sentMessages =
existingPersona.sentMessages + newMessage)