根据命令行输入,我需要设置一些下游函数将使用的运行时常量。这些函数中的代码可能在其他线程中执行,所以我不考虑“声明 var 并使用绑定宏”组合。与使用原子相比,使用 var(带有 alter-var-root)的优点/缺点是什么?那是,
(declare *dry-run*) ; one of my constants
(defn -main [& args]
; fetch command line option
;(cli args ...)
(alter-var-root #'*dry-run* (constantly ...))
(do-stuff-in-thread-pool))
相对
(def *dry-run* (atom true))
(defn -main [& args]
; fetch command line option
;(cli args ...)
(reset! *dry-run* ...)
(do-stuff-in-thread-pool))
如果我应该考虑这两个之外的其他选择,我很想知道。
此外,理想情况下,我宁愿不向 atom 提供初始 val,因为我想在其他地方设置默认值(使用 cli 调用),但我可以忍受它,特别是如果使用 atom 与替代方案相比具有优势( s)。