我注意到,而在我的追求瘦函数式编程,有情况下,当参数列表开始使用嵌套不变的数据结构时变得过大。这是因为在更新对象状态时,您还需要更新数据结构中的所有父节点。请注意,在这里我将“update”表示为“用适当的更改返回新的不可变对象”。管理更新嵌套的不可变的数据结构,函数式语言
例如我发现自己写(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)))))
这一切都更新一个简单的属性是很丑陋,但除了调用者必须集合所有的参数!
与一般函数式语言不可改变的数据结构时,这必须是一个相当普遍的要求,所以是有一个很好的模式或办法来避免这一点,我应该使用呢?
您可以拼合数据:分别存储世界,国家,城市等。然后,如果您必须更新一个,请在平面结构中更新它。通过密钥将数据链接在一起,以便在需要时再将它们放在一起。不过,我们现在正在重新创建关系数据库。 – 2010-06-29 16:59:52