Clojure 非嵌套结构的更新与更新功能
我查看了一些,注意到两位不同的作者(针对“超”和“平衡”示例)使用了: 而不是简单地Clojure 非嵌套结构的更新与更新功能,clojure,Clojure,我查看了一些,注意到两位不同的作者(针对“超”和“平衡”示例)使用了: 而不是简单地 (update s :x + dx vx) 这有什么原因吗?如果s是一个嵌套很深的结构,是的,那么它是有意义的。但在这两种情况下,键列表只有一个条目,因此对我来说,上面的两个片段似乎是等效的: (let [dx 1 vx 2 s {:x 5}] (println (update-in s [:x] + dx vx)) (println (update s :x + dx vx)
(update s :x + dx vx)
这有什么原因吗?如果s
是一个嵌套很深的结构,是的,那么它是有意义的。但在这两种情况下,键列表只有一个条目,因此对我来说,上面的两个片段似乎是等效的:
(let [dx 1
vx 2
s {:x 5}]
(println (update-in s [:x] + dx vx))
(println (update s :x + dx vx)))
{:x 8}
{:x 8}
除了中的更新可能会有多一点开销
我能想到的唯一原因是,如果他们在将来嵌套状态,它将简化转换。然而,对于这样一个简单的例子,这似乎不太可能,特别是考虑到到处都有魔法常数
当结构没有嵌套时,是否有任何理由在更新中使用更新,而不是更新?如果您这样做,您将看到它们都在封面下使用assoc
。除了风格和代码的清晰性,考虑到附近的和相关的代码之外,没有理由选择其中一个
另外,update
直到Clojure 1.7才被添加,这可能会在选择中发挥作用
另外,如果您在
中查找缺少的函数dissoc,您可以找到它。如果您查找,您将看到它们都在封面下使用assoc
。除了风格和代码的清晰性,考虑到附近的和相关的代码之外,没有理由选择其中一个
另外,update
直到Clojure 1.7才被添加,这可能会在选择中发挥作用
注意:如果您在
中查找缺少的函数
dissoc,您可以找到它。对于非嵌套结构,没有理由在
中使用
更新,而更新
是首选。对于非嵌套结构,没有理由在中使用更新,而更新
是首选。(a)为什么dissoc与此相关?(b) 如果您打算建议使用您自己的库,请明确指出它是您自己的。(a)为什么dissoc在这里是相关的?(b) 如果你打算建议使用你自己的图书馆,请明确指出它是你自己的。
(let [dx 1
vx 2
s {:x 5}]
(println (update-in s [:x] + dx vx))
(println (update s :x + dx vx)))
{:x 8}
{:x 8}