Clojureが新しくなったので、これは本当に明白な質問ですが、役に立たない答えは見つかりません。JavaからClojureを呼び出すときのスコープClojureのスコープ
Clojureを使用してCompiler.eval()を複数回呼び出して結果を計算するSpring Bootを使用してRESTサービスを実装しています。私はすべての要求(定数、関数、グローバル変数など)の間で共有されるはずのClojureのものをいくつか持っています。
クラスパス内でclojure.jarを実行可能なJARとしてこのサービスを実行します。ただし、JVMの観点からは、静的メソッドを使用してClojureにのみアクセスできます。つまり、JVMごとに「Clojureのインスタンス」が1つしかありません。つまり、あるリクエスト中にeval(def a 1)を実行すると、「a」も他のリクエストからも見えるようになります。
質問1:Clojureで動的(リクエストスコープの)変数/シンボルはどこでどのように定義する必要がありますか?
質問2:すべてのリクエストに対して完全に「新しい」Clojureインスタンスが必要だとします。どうすればそれを達成できますか?たとえば、変数が同じ名前で、同じ名前空間にありますが、同じJVM内で異なる値を持つことができますか?私は新鮮なクラスローダーを使用してClojureクラスの全く新しいセットをロードできることは知っていますが、それはひどく面倒です。
)私は 'invoke'を使用し、これは単なるWebリクエストに関連しない – cfrick