我正在尝试实现一个不可变的数据结构来模拟IT网络和实例(计算机)。这是一个简化版本:
我希望听到人们在如何维护“真正”的不可变数据方面的想法和经验。
谢谢。
object Sample {
case class Instance(id: String, flag: Boolean)
case class Network(id: String, instances: Set[Instance])
case class Repo(networks: Map[String, Set[Network]])
// return new Repo with the instance with id == instanceId updated
// how to do this using lenses?
def updateInstanceFlag(networksKey: String, instanceId: String, flag: Boolean): Repo = ???
}
updateInstanceFlag 函数应该创建一个更新后的数据副本,对应的实例(具有 id instanceId)被修改。我尝试使用镜头来实现,但代码太复杂了。
特别是,在通过 ID 定位实例或网络并更新数据结构时,我很难进行组合。查询返回可选值也增加了镜头的复杂性。
我使用自己的镜头实现,但没有真正的偏好(我知道 Shapeless、Monocle、Scalaz 的镜头实现)。我希望听到人们在如何维护“真正”的不可变数据方面的想法和经验。
谢谢。
Repo
案例类? - Ende Neu