コマンドライン入力に基づいて、いくつかの実行時定数を設定する必要があります。これらの関数のコードは他のスレッドでも実行できるので、 "declare var and binding macro"の組み合わせは考慮していません。どのような賛否両論は、これを使用する代わりに原子を使用してvar(alter-var-rootと一緒に)を使用するのですか?私が知っているのが大好きだ、考慮すべきであるこれら二つのほかに別のオプションがある場合はそれは、実行時定数のvarとatomの比較
(def *dry-run* (atom true))
(defn -main [& args]
; fetch command line option
;(cli args ...)
(reset! *dry-run* ...)
(do-stuff-in-thread-pool))
対
(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))
です。
また、理想的には、デフォルト値を別の場所(cli呼び出し)に設定したいので、私は原子に最初のvalを指定しないことをお勧めしました。しかし、原子を使用すると、代わりのものへ。
あなたのヒントありがとうございます。 promiseに渡される値は、すべてのスレッド(自動バインディング搬送)で表示されるのか、それとも特別なことをする必要がありますか? – Don
バインディングの搬送は、vars以外のものでは全く画像に入りません。プロミスとは、逆参照されたときに渡された値を生成するか、そのような値が到着するまでブロックするClojureオブジェクトのことです。スレッドは、グローバルハッシュマップを定義した場合よりも関連性はありません。 – amalloy