Clojure Java互操作性

时间:2018-12-29 06:15:08

标签: java clojure clojure-java-interop

我是Clojure的新手。我试图了解Clojure Java Interop。我有一个Java hashmap,我需要在Clojure程序中使用它。我正在尝试在哈希映射上进行迭代,但这给了我一个错误。

Main.java:

  package com.example;
  import java.util.HashMap;
  import java.util.Map;
  import clojure.java.api.Clojure;
  import clojure.lang.IFn;
  class Main {
       public static void main( String[] args ) {
          IFn require = Clojure.var("clojure.core", "require");
          require.invoke(Clojure.read("com.example.core"));
          IFn Print  = Clojure.var("com.example.core", "Print");
          Map<String, String> map = new HashMap<>();
          map.put("message", "hello world");
          Print.invoke(map);
   }
}

core.clj:

   (ns com.example.core
        (:gen-class))
   (defn Print [m]
       (doseq [[k v] map] (prn k v)))
   (defn -Print [m]
        (Print m))

当我尝试将程序作为Java应用程序运行时,它是在说-  线程“主”中的异常java.lang.IllegalArgumentException:不知道  如何从clojure.core $ map创建ISeq。

当我尝试将其作为clojure应用程序运行时,它是在说-  线程“主”中的异常clojure.lang.ArityException:错误的数量  args(0)传递给:core / -main。

我试图在Internet上搜索资源,并且到处都在说我们需要像使用clojure map一样使用java hashmap。但是什么都没有为我工作,我也不知道我在做什么错。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

(defn Print [m]        (doseq [[k v] map](prn k v)))

我认为地图支持我猜想