2011-12-17 114 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