如何将现有函数应用于新类?

时间:2012-06-18 08:20:19

标签: clojure

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

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

我使用STM方式dosync更新此地图。但我发现它没有我想要的那么快:

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

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

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:7)

您可以使用atom,因为您只修改一个不需要交易的值,因此不需要ref

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