Конструктор полукопий / клонов для методов обновления - PullRequest
1 голос
/ 17 декабря 2011

У меня много тематических классов в формате

case class Cluster (id: Pk[Long],
        foo: Long,
        bar: String,
        env: String,
        name: String,
        deleted: Boolean = false) {
    def delete() = Cluster(id, foo, bar, env, name, true)
    def updateName(name: String) = Cluster(id, foo, bar, env, name, deleted)
    def updateFoo(foo: Long) = Cluster(id, foo, bar, env, name, deleted)
}

Я пытаюсь сделать все мои классы неизменяемыми, то есть методы обновления создают новый экземпляр. Некоторые из классов имеют гораздо больше членов, и наличие методов обновления, клонирующих объект self с другим значением, может привести к ошибкам.

Есть идеи, как сделать его более эффективным?

1 Ответ

9 голосов
/ 17 декабря 2011

Вам не нужны ваши методы. Вам просто нужно:

val c1 = Cluster(...)
val c2 = c1.copy(env = "new env") // Just list those fields you want to update.

Метод copy () доступен для классов case "бесплатно".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...