Scala でケースクラスインスタンスを複製し、フィールドを 1 つだけ変更するにはどうすればよいでしょうか? 質問する

Scala でケースクラスインスタンスを複製し、フィールドを 1 つだけ変更するにはどうすればよいでしょうか? 質問する

ペルソナ、つまりさまざまなソーシャル ネットワーク上の人々を表すケース クラスがあるとします。そのクラスのインスタンスは完全に不変であり、不変コレクションに保持され、最終的には 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 classcopyまさにこの用途に特化したメソッドが付属しています:

val newPersona = existingPersona.copy(sentMessages = 
                   existingPersona.sentMessages + newMessage)

おすすめ記事