带有可选值的Scala案例类副本
我想复制一个case类,用第二个case类的可选值更新它带有可选值的Scala案例类副本,scala,Scala,我想复制一个case类,用第二个case类的可选值更新它 case class A( id: Int, a: String, b: String, c: String) case class Update( a: Option[String], b: Option[String], c: Option[String]) 制作a副本、使用Update中非None的值更新字段的最有效方法是什么?如果可能的话,我希望避免在Update中使用包含所有可能的Some/Non
case class A(
id: Int,
a: String,
b: String,
c: String)
case class Update(
a: Option[String],
b: Option[String],
c: Option[String])
制作a
副本、使用Update
中非None
的值更新字段的最有效方法是什么?如果可能的话,我希望避免在Update
中使用包含所有可能的Some/None
值排列的match/case语句 简单地说:
val originalA: A = // ...
val update: Update = // ...
val newA: A = A(
id = originalA.id,
a = update.a.getOrElse(originalA.a),
...
)
所有case类都有一个copy方法 (查找复制术语) 还可以查看透镜图案,以便以功能性方式复制深度嵌套的对象: 一旦对象由其他对象等组成,使用
copy
方法就会变得非常麻烦。Scalaz的镜头模式实现是一个很好的选择
val a = A(1, "", "", "")
val update = Update(None, "scalaz".some, None)
val b = a.copy(
b = update.b.getOrElse(a.b)
)