gpt4 book ai didi

clojure - 运行时常量的 var 与atom

转载 作者:行者123 更新时间:2023-12-03 00:33:14 25 4
gpt4 key购买 nike

基于命令行输入,我需要设置一些运行时常量,许多下游函数将使用这些常量。这些函数中的代码可能在其他线程中执行,因此我不考虑“声明 var 并使用绑定(bind)宏”组合。与使用原子相比,使用 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))

除了这两个我应该考虑的选择之外,如果还有其他选择,我很想知道。

此外,理想情况下,我宁愿不向原子提供初始值,因为我想在其他地方设置默认值(通过 cli 调用),但我可以接受它,特别是如果使用原子与替代方案。

最佳答案

一次性写入值正是用例 promise 的设计目的:

(def dry-run (promise))

(defn -main []
(deliver dry-run true))

(defn whatever [f]
(if @dry-run
...))

关于clojure - 运行时常量的 var 与atom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14313433/

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