Disons que j'ai une classe de cas qui représente des personnages, des gens sur différents réseaux sociaux. Les instances de cette classe sont entièrement immuables et sont conservées dans des collections immuables, pour être éventuellement modifiées par un acteur Akka.
Maintenant, j'ai une classe de cas avec de nombreux champs et je reçois un message qui me dit que je dois mettre à jour l'un des champs, quelque chose comme ceci:
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)
Remarquez que je dois spécifier tous les champs, même si un seul change. Existe-t-il un moyen de cloner la persone existante et de remplacer un seul champ, sans spécifier tous les champs qui ne changent pas? Puis-je écrire cela comme un trait et l'utiliser pour toutes mes classes de cas?
Si Persona était une instance de type carte, ce serait facile à faire.