用于更新方法的半复制/克隆构造函数

Eis*_*ith 1 scala

我有许多格式为的案例类

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)
}
Run Code Online (Sandbox Code Playgroud)

我试图让我的所有类都不可变,即更新方法正在创建一个新实例.一些类有更多的成员,并且具有克隆自身对象的更新方法具有不同的值,因为tedies容易出错.

有关如何提高效率的任何想法?

Ada*_*ien 9

你不需要你的方法.你只需要:

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

copy()方法可用于"免费"的案例类.