Diciamo che ho una classe di casi che rappresenta personaggi, persone su diversi social network. Le istanze di quella classe sono completamente immutabili e sono conservate in collezioni immutabili, che alla fine saranno modificate da un attore di Akka.
Ora ho una classe di casi con molti campi e ricevo un messaggio che dice che devo aggiornare uno dei campi, qualcosa del genere:
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)
Nota che devo specificare tutti i campi, anche se cambia solo uno. C'è un modo per clonarePersona esistente e sostituire un solo campo, senza specificare tutti i campi che non cambiano? Posso scriverlo come tratto e usarlo per tutte le mie classi di casi?
Se Persona fosse un'istanza simile a una mappa, sarebbe facile da fare.