コマンドライン入力に基づいて、いくつかのダウンストリーム関数が使用するランタイム定数を設定する必要があります。これらの関数のコードは他のスレッドで実行される可能性があるため、「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))
この 2 つ以外に考慮すべきオプションがある場合は、知りたいです。
また、理想的には、(cli 呼び出しを使用して) デフォルトを別の場所に設定したいので、アトムに初期値を提供しないことをお勧めしますが、特にアトムを使用することが代替 ( s)。