gpt4 book ai didi

clojure - clojure 中全局变量的最佳实践(refs 与 alter-var-root)?

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

我发现自己最近在 clojure 代码中使用了以下习惯用法。

(def *some-global-var* (ref {}))

(defn get-global-var []
@*global-var*)

(defn update-global-var [val]
(dosync (ref-set *global-var* val)))

大多数时候,这甚至不是多线程代码,可能需要 refs 为您提供的事务语义。感觉 ref 不仅仅适用于线程代码,而且基本上适用于任何需要不变性的全局。对此有更好的做法吗?我可以尝试重构代码以仅使用绑定(bind)或 let,但这对于某些应用程序来说可能会变得特别棘手。

最佳答案

当我看到这种模式时,我总是使用原子而不是引用 - 如果您不需要事务,只需要共享的可变存储位置,那么原子似乎是正确的选择。

例如对于我将使用的键/值对的可变映射:

(def state (atom {}))

(defn get-state [key]
(@state key))

(defn update-state [key val]
(swap! state assoc key val))

关于clojure - clojure 中全局变量的最佳实践(refs 与 alter-var-root)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3267905/

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