language-agnostic - 用函数式语言管理对嵌套不可变数据结构的更新

标签 language-agnostic design-patterns functional-programming clojure immutability

在寻求精益函数式编程的过程中,我注意到在使用嵌套不可变数据结构时参数列表开始变得过多的情况。这是因为在更新对象状态时,您还需要更新数据结构中的所有父节点。请注意,这里我使用“更新”来表示“返回具有适当更改的新不可变对象(immutable对象)”。

例如我发现自己编写的那种函数(Clojure 示例)是:

(defn update-object-in-world [world country city building object property value]
  (update-country-in-world world
    (update-city-in-country country
      (update-building-in-city building
        (update-object-in-building object property value))))) 

更新一个简单属性的所有这些都非常难看,但此外调用者必须组装所有参数!

通常在处理函数式语言中的不可变数据结构时,这必须是一个相当普遍的要求,那么是否有一个好的模式或技巧来避免这种情况,我应该使用它来代替?

最佳答案

尝试

(update-in 
  world 
  [country city building] 
  (update-object-in-building object property value))

关于language-agnostic - 用函数式语言管理对嵌套不可变数据结构的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3140050/

相关文章:

algorithm - 帮我写一个边界值的二进制搜索(提取子列表)

algorithm - 向非技术人员解释 AdaBoost 算法

c# - 当需要多个处理程序时,选择最具体的处理程序

c++ - 具有构造函数参数的单例

java - Java 8 中是否有用于参数检查的 requiredFalse 方法?

oop - OOP 接口(interface)和 FP 类型类的区别

functional-programming - 经验丰富的计划者,letcc 和诡计

language-agnostic - 关于网络技术的初学者问题

image - 如何以编程方式对图像是 'personal' 的可能性进行评分?

oop - 仅具有副作用的方法的名称