【问题标题】:Clojure Java InteroperabilityClojure Java 互操作性
【发布时间】:2018-12-29 06:15:08
【问题描述】:

我是 Clojure 的新手。我正在尝试了解 clojure java interop。我有一个需要在 Clojure 程序中使用的 java hashmap。我正在尝试迭代哈希映射,但它给了我一个错误。

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 应用程序运行时,它是在说 - 线程“main”clojure.lang.ArityException 中的异常:错误数量 args (0) 传递给:core/-main。

我试图在互联网上搜索资源,到处都在说我们需要像使用 clojure map 一样使用 java hashmap。但是没有什么对我有用,我不知道我做错了什么。

任何帮助将不胜感激。

【问题讨论】:

  • 我终于解决了这个问题。我的 Clojure 代码中有一个错误。

标签: java clojure clojure-java-interop


【解决方案1】:

(定义打印 [m] (剂量[[k v]图](prn k v)))

我认为地图支持我猜

【讨论】:

    猜你喜欢
    • 2015-06-12
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多