在Scala中复制对象的简明方法

Ant*_*ine 3 ocaml scala

OCaml公开了一种简洁的语法,用于复制具有大量字段的记录.

type t = {
  x : int;
  y : int;
  z : int;
}

let _ =
  let v = {x = 1; y = 2; z = 3} in
  {v with z = 42}
Run Code Online (Sandbox Code Playgroud)

Scala的案例类是否有类似的语法?

Gáb*_*kos 6

案例类定义不只是equals,hashCodetoString方法,而且还copy.幸运的是,该copy方法的定义方式是this对象的当前值是默认参数,但您可以使用命名参数更改它们中的任何一个.您的示例如下所示:

case class Type(
  x : int,
  y : int,
  z : int,
)

val v = Type(x = 1, y = 2, z = 3)
v.copy(z=42)
Run Code Online (Sandbox Code Playgroud)

但您也可以使用其中一个镜头库.(我认为scalaz和无形都有一个.)