我正在查看一些Quil examples,并注意到2位不同的作者(对于" Hyper"和#34;均衡"示例)使用了:
(update-in s [:x] + dx vx)
而不是简单
(update s :x + dx vx)
这有什么理由吗?如果s
是一个深层嵌套的结构,那么,这是有意义的。但在这两种情况下,键列表只有1个条目,所以对我来说,上面的2个片段看起来是等价的:
(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}
除了update-in
可能会有更多的开销。
我能想到的唯一原因是,如果他们将该状态嵌套在未来,它将缓解过渡。对于这样一个简单的例子,这似乎不太可能,特别是考虑到各处都有魔术常数。
当结构没有嵌套时,是否有理由使用update-in
而不是update
?
答案 0 :(得分:2)
如果您look at the source code,您会看到他们都使用assoc
。除了样式和代码清晰度之外,没有理由更喜欢其中一个,考虑附近和相关代码。
此外,在Clojure 1.7之前没有添加update
,这可能会在选择中发挥作用。
P.S。如果您一直在寻找缺失的函数dissoc-in
,您可以找到它in the Tupelo library。
答案 1 :(得分:2)
没有理由将update-in
用于非嵌套结构,并且首选update
。