gpt4 book ai didi

clojure - 如何将现有的函数应用到新的类中?

转载 作者:行者123 更新时间:2023-12-02 15:34:30 26 4
gpt4 key购买 nike

在我的项目中,许多客户端会修改服务器中的 map 。我使用 mapref,如下所示:

(def dict (ref {})) ; the map we play with

我使用 STM 方式 dosync 更新此 map 。但我发现它没有我希望的那么快:

user=> (time (dotimes [n 1000000] (dosync ( alter xx assoc xx 1 1))))
"Elapsed time: 2470.766 msecs"

所以我决定使用原生Java CuncurrentHashMap来代替Clojure内置的map和STM。如何将 Java CuncurrentHashMap 包装到 Clojure 中,以便我可以像 Clojure 映射一样修改它,使用 assoc、contains?、dissoc 等。这将使我修改以免代码行。

有办法实现吗?

最佳答案

您可以使用atom,因为您只修改单个值,不需要事务,因此不需要ref

user=> (def dict (atom {}))
user=> (time (dotimes [n 1000000] (swap! dict assoc :xx 1)))
"Elapsed time: 108.105703 msecs"

关于clojure - 如何将现有的函数应用到新的类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11079162/

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