2011-12-17 90 views
1

我在半拷贝/克隆构造

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) 
} 

格式许多情况下,我班,并试图让所有我的班不变,即更新方法是创建一个新的实例。 某些类有更多的成员,并且使用不同的值克隆自我对象的更新方法是烦人的错误。

任何想法如何使它更有效率?

回答

9

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

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

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

+0

wtf?案例类ftw! – 2011-12-17 06:48:07