获取更新的不可变对象的简短方法?

时间:2013-04-03 14:31:10

标签: scala

我有一个包含多个参数的类,例如class Building(val a: Int, val b: Int, val c: Int)。这个代码我必须更新它:

def updatedA(a: Int): Building = new Building(a, this.b, this.c)
def updatedB(b: Int): Building = new Building(this.a, b, this.c)

是否有更短的方式来获取更新的对象,如下所示?

def updatedA(newA: Int): Building = new { val a = newA } extends this // doesn't compile/ type is AnyRef instead of Building

1 个答案:

答案 0 :(得分:7)

您是否看过copyWith() construction mechanism

  

copyWith方法利用了Scala 2.8的默认参数。   对于类中的每个字段,它都有一个默认为的参数   当前值。无论哪个参数都没有指定就会采用它们   原始价值观。我们可以使用命名参数调用该方法(也在   Scala 2.8)。

     

val newJoe = joe.copyWith(phone =“555-1234”)

或查看copy mechanism案例类。

  

/ *真正的力量是自动的复制构造函数   在案例类中生成。我可以用任何或所有副本制作副本   通过使用复制构造函数修改属性并声明哪些属性   要修改的字段* /

     

阶> parent.copy(right = Some(node))