gpt4 book ai didi

clojure - assoc-in with two elements 和 update/assoc 的区别

转载 作者:行者123 更新时间:2023-12-02 08:15:38 24 4
gpt4 key购买 nike

我已经做了一段时间(assoc-in my-hash [:data :id] 1),看起来不错。

最近,由于我很少有超过两个级别,我注意到我可以执行 (update my-hash :data assoc :id 1),这听起来完全不同,但返回相同。

所以,我想知道,性能有什么不同吗?您认为它在某种程度上比另一种方式更具可读性吗?更地道?

update/assoc 感觉对我来说比较贵,但我真的比assoc-in更喜欢它,这让我每次看到它都会停下来思考.

最佳答案

谈到性能时,最好进行衡量。理想情况下,你会组装一个真实的 map (无论你的 map 是大还是小都会对各种操作的相对成本产生一些影响)并尝试两种方式 Criterium :

(require '[criterium.core :as c])

(let [m (construct-your-map)]
(c/bench (assoc-in m [:data :id] 1))
(c/bench (update m :data assoc :id 1)))

在幕后,update + assocassoc-in 的展开版本,不需要辅助向量持有 key ,所以我希望它比 assoc-in 更快。但是 (1) 通常我不会担心像这样的事情上的微小性能差异,(2) 当我关心时,再次强调,衡量比猜测更好。

(在我的机器上,使用 Clojure 1.9.0-alpha14,update + assoc 确实更快,在 ~282 ns 与 ~353 ns 相比 assoc-in 给出了我的 (assoc (into {} (map #(vector % %)) (range 20)) :data {:id 0}) 的小测试图。 )

最终在大多数情况下,可读性将是更重要的因素,但我认为您一般不能说一种方法比另一种方法更具可读性。如果您的 链已经多次使用 assoc-inupdate ,那么最好重复相同的功能一致性(只是为了避免让读者怀疑“这件事真的不同吗”)。如果您拥有自己控制的代码库,则可以采用一种偏爱一种方法而不是另一种方法的“内部风格”。等等等等

我可能会认为 assoc-in 在大多数情况下更具可读性——它使用单个“动词”并且一目了然update 是 – 但如果您更喜欢 update + assoc 并希望在您的代码库中保持它们的使用一致,那当然也很好。

关于clojure - assoc-in with two elements 和 update/assoc 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42321434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com