我是 Clojure 的新手,我正在使用具有 leiningen + clojure + java 的应用程序,问题出在插件 lein-environ“1.0.0”上。
在应用程序中,它使用了很多“env”映射。通过读取 .lein_env 或 project.clj 中定义的现有值。但在同一个应用程序中正在做一些:
(attach! :my-val (str (env :api-host) "/api/" (env :resource)))
如果我用 a 打印这个值,(println (env :my-val))
我会看到内容。但是如果我尝试将它作为 Map 发送到 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;
}