私はClojureが初めてで、leiningen + clojure + Javaを含むアプリケーションで作業していますが、問題はプラグインlein-environ "1.0.0"にあります。
アプリ内では、「env」マップを多く使用しています。.lein_env または project.clj 内で定義された既存の値を読み取ることによって。しかし、同じアプリケーション内でいくつかのことを行っています:
(attach! :my-val (str (env :api-host) "/api/" (env :resource)))
この値を で出力する(println (env :my-val))
と、コンテンツが表示されます。しかし、マップとして Java に送信しようとすると、この値が表示されません。以前に定義された値を取得します。.lein_env のすべてを意味しますが、アプリケーションで計算された値はありません。
関数に関するAPIやドキュメントを見つけていないattach!
ので、正直なところ、それが何をするのかわかりません。しかし、値はenvから読み取られるため、それらのキーをマップに添付していると思いました。
私はenvをclojure内でHashMapに変換しようとしました:
(defn- creat-env-hash-map []
(java.util.HashMap. (env)))
それでも同じ結果が得られますが、それらの値はマップされていません。
私は何が間違っているのか、これが可能かどうか疑問に思います。
どうもありがとうございました。
編集:
私は途中でJavaコードを呼び出します:
(println (com.my.package.HelperClass/staticMethod env))
Java の静的メソッド:
public static String staticMethod(HashMap<String, String> map) {
String result = "";
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
result += pair.getKey() + " = " + pair.getValue() + "\n";
it.remove(); // avoids a ConcurrentModificationException
}
return result;
}