【问题标题】:Semi copy/clone constructor for update methods更新方法的半复制/克隆构造函数
【发布时间】:2011-12-17 08:58:37
【问题描述】:

我有很多格式为

的案例类
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 对象很容易出错。

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

【问题讨论】:

    标签: scala


    【解决方案1】:

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

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

    copy() 方法可用于“免费”案例类。

    【讨论】:

    • 我不知道你有免费的副本。太棒了 +1。
    猜你喜欢
    • 1970-01-01
    • 2010-11-09
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    相关资源
    最近更新 更多