Powiedzmy, że mam klasę przypadków, która reprezentuje osobowości, ludzi z różnych sieci społecznościowych. Instancje tej klasy są w pełni niezmienne i są przechowywane w niezmiennych kolekcjach, które ostatecznie zostaną zmodyfikowane przez aktora Akka.
Teraz mam klasę przypadków z wieloma polami i otrzymuję komunikat, że muszę zaktualizować jedno z pól, coś takiego:
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)
Zauważ, że muszę określić wszystkie pola, chociaż tylko jedna zmiana. Czy istnieje sposób na sklonowanie istniejącej Persony i zastąpienie tylko jednego pola bez określania wszystkich pól, które się nie zmieniają? Czy mogę napisać to jako cechę i używać jej we wszystkich moich klasach przypadków?
Gdyby Persona była instancją podobną do mapy, byłoby to łatwe.