Допустим, у меня есть кейс-класс, который представляет персонажей, людей в разных социальных сетях. Экземпляры этого класса являются полностью неизменяемыми и хранятся в неизменяемых коллекциях, которые в конечном итоге изменяет актер Акка.
Теперь у меня есть класс case со многими полями, и я получаю сообщение о том, что мне нужно обновить одно из полей, примерно так:
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)
Обратите внимание, я должен указать все поля, хотя только одно из них изменяется. Есть ли способ клонировать существующееPersona и заменить только одно поле, не указывая все поля, которые не меняются? Могу ли я написать это как черту характера и использовать ее для всех моих кейс-классов?
Если бы Persona был экземпляром, похожим на Map, это было бы легко сделать.