【发布时间】:2011-04-23 10:52:54
【问题描述】:
假设我有以下两个case classes:
case class Address(street: String, city: String, state: String, zipCode: Int)
case class Person(firstName: String, lastName: String, address: Address)
以及Person 类的以下实例:
val raj = Person("Raj", "Shekhar", Address("M Gandhi Marg",
"Mumbai",
"Maharashtra",
411342))
现在如果我想更新raj 中的zipCode,那么我将不得不这样做:
val updatedRaj = raj.copy(address = raj.address.copy(zipCode = raj.address.zipCode + 1))
随着嵌套层次的增加,这变得更加丑陋。有没有更简洁的方法(比如 Clojure 的 update-in)来更新这种嵌套结构?
【问题讨论】:
-
我假设你想保持不变性,否则,只需在 Person 的地址声明前添加一个 var。
-
@GClaramunt:是的,我想保持不变性。
标签: scala case-class zipper