在 Scala 中复制对象的简洁方法
Concise way of copying objects in Scala
OCaml 公开了一种用于复制具有很多字段的记录的简洁语法。
type t = {
x : int;
y : int;
z : int;
}
let _ =
let v = {x = 1; y = 2; z = 3} in
{v with z = 42}
Scala 的案例类是否有类似的语法?
Case 类 不仅定义了 equals
、hashCode
和 toString
方法,还定义了 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)
但您也可以使用镜头库之一。 (我想 scalaz 和 shapeless 都有。)
OCaml 公开了一种用于复制具有很多字段的记录的简洁语法。
type t = {
x : int;
y : int;
z : int;
}
let _ =
let v = {x = 1; y = 2; z = 3} in
{v with z = 42}
Scala 的案例类是否有类似的语法?
Case 类 不仅定义了 equals
、hashCode
和 toString
方法,还定义了 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)
但您也可以使用镜头库之一。 (我想 scalaz 和 shapeless 都有。)