如果您有这样的案例类:
case class Foo(x: String, y: String, z: String)
你有两个实例,例如:
Foo("x1","y1","z1")
Foo("x2","y2","z2")
是否可以将实例 1 合并到实例 2 中,除了字段 z 之外,结果将是:
Foo("x1","y1","z2")
我的用例只是通过 Scala API 将 JSON 对象提供给 Backbone 应用程序,然后 Backbone 应用程序返回相同结构的 JSON,以便我可以保存/更新它。这些 JSON 对象被解析为案例类,以便于 Scala 操作。但有些字段永远不应该由客户端更新(例如creationDate)。现在我正在进行手动合并,但我想要一个更通用的解决方案,有点像增强的复制功能。
我想要的是这样的:
instanceFromDB.updateWith(instanceFromBackbone, excludeFields = "creationDate" )
但我希望它是类型安全的:)
Edit:我的案例类有更多字段,我希望默认行为合并字段,除非我明确表示不合并它们。
你想要的已经在那里了;你只需要以另一种方式解决问题即可。
case class Bar(x: String, y: String)
val b1 = Bar("old", "tired")
val b2 = Bar("new", "fresh")
如果你想要一切都在b2
没有特别提到,你应该复制b2
;任何来自b1
你想保留你可以明确提及:
def keepY(b1: Bar, b2: Bar) = b2.copy(y = b1.y)
scala> keepY(b1, b2)
res1: Bar = Bar(new,tired)
只要您在同一案例类的两个实例之间进行复制,并且字段像默认情况一样是不可变的,这就会满足您的要求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)