【发布时间】:2013-01-14 04:45:18
【问题描述】:
基于命令行输入,我需要设置一些运行时常量,许多下游函数将使用这些常量。这些函数中的代码可能在其他线程中执行,所以我不考虑“声明 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 提供的优势相比替代品。
【问题讨论】:
标签: clojure