Digamos que eu tenha uma classe de caso que represente personas, pessoas em diferentes redes sociais. Instâncias dessa classe são totalmente imutáveis, e são mantidas em coleções imutáveis, para serem eventualmente modificadas por um ator Akka.
Agora, tenho uma classe de caso com muitos campos e recebo uma mensagem dizendo que devo atualizar um dos campos, algo como isto:
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)
Observe que eu tenho que especificar todos os campos, mesmo que apenas um seja alterado. Existe uma maneira de clonar o existentePersona e substituir apenas um campo, sem especificar todos os campos que não mudam? Posso escrever isso como uma característica e usá-lo para todas as minhas classes de casos?
Se o Persona fosse uma instância do tipo mapa, seria fácil.