Digamos que tengo una clase de caso que representa personas, personas en diferentes redes sociales. Las instancias de esa clase son completamente inmutables, y se mantienen en colecciones inmutables, para ser eventualmente modificadas por un actor de Akka.
Ahora, tengo una clase de caso con muchos campos, y recibo un mensaje que dice que debo actualizar uno de los campos, algo como esto:
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)
Tenga en cuenta que tengo que especificar todos los campos, aunque solo uno cambie. ¿Hay alguna manera de clonar la persona existente y reemplazar solo un campo, sin especificar todos los campos que no cambian? ¿Puedo escribir eso como un rasgo y usarlo para todas mis clases de casos?
Si Persona fuera una instancia similar a un mapa, sería fácil de hacer.