Clojure Java Interoperability - PullRequest
       23

Clojure Java Interoperability

0 голосов
/ 29 декабря 2018

Я новичок в Clojure.Я пытаюсь понять clojure java interop.У меня есть javash 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, она говорит - Исключение в потоке "main" java.lang.IllegalArgumentException: Не знаю, как создать ISeq из: clojure.core $ map.

Когда я пытаюсь запустить его как приложение clojure, оно говорит - Исключение в потоке "main" clojure.lang.ArityException: неверное количество аргументов (0), переданных: core / -main.

Я пытался искать ресурсы в Интернете, и везде говорят, что нам нужно использовать java hashmap втак же, как мы используем карту Clojure.Но ничего не работает для меня, и я не знаю, что я делаю неправильно.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 31 декабря 2018

(defn Print [м] (дозаq [[kv] карта] (прн кв))) *

Я думаю, что карта является поддержкой, я думаю,

...