3

我有一个带有几个参数的类,例如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
4

1 回答 1

7

你看过copyWith() 构造机制吗?

copyWith 方法利用了 Scala 2.8 的默认参数。对于类中的每个字段,它都有一个默认为当前值的参数。未指定的任何参数都将采用其原始值。我们可以使用命名参数调用该方法(也在 Scala 2.8 中)。

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

或者查看案例类的复制机制

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

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

于 2013-04-03T14:34:06.440 回答