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

fer*_*k86 3 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)
Run Code Online (Sandbox Code Playgroud)

是否有更短的方法来获取如下更新的对象?

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

Bri*_*new 7

你看过copyWith() 施工机制了吗?

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

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

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

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

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