从Java向Clojure传递参数

从Java向Clojure传递参数,java,interop,clojure,methods,arguments,Java,Interop,Clojure,Methods,Arguments,我想将Clojure代码嵌入Java。该站点在设置此参数的基础知识方面很有帮助,但它所传递的唯一参数是字符串类型。我也尝试过使用ints,它们也很有效 我的问题是,是否有某种格式化的方式将结构化数据传递给Clojure。特别是,我有一个点列表,我想传递给Clojure,并转化为一个向量,看起来像这样: [[1 2] [3 4] [5 6]] 做这件事最简单的方法是什么?我是否可以在Java端进行预处理,或者应该在Clojure端进行后处理,或者Clojure中是否有什么东西可以处理这个问题?我

我想将Clojure代码嵌入Java。该站点在设置此参数的基础知识方面很有帮助,但它所传递的唯一参数是字符串类型。我也尝试过使用ints,它们也很有效

我的问题是,是否有某种格式化的方式将结构化数据传递给Clojure。特别是,我有一个点列表,我想传递给Clojure,并转化为一个向量,看起来像这样:

[[1 2] [3 4] [5 6]]
做这件事最简单的方法是什么?我是否可以在Java端进行预处理,或者应该在Clojure端进行后处理,或者Clojure中是否有什么东西可以处理这个问题?我怀疑它将一个数字字符串和每个元组的长度传递给Clojure,并让它将字符串处理成一个向量。然而,Clojure的这方面并没有太多的例子,我很好奇我是否遗漏了一些明显的东西


编辑:请看mikera的回答:您对传递Java对象感兴趣。如果您只是想将数据提前格式化为set/map/等的Clojure格式,请查看下面的答案。

这取决于数据的格式,但您可能会发现直接传递表示数据的Java对象并使用Clojure的Java互操作性功能读取数据是最简单的

e、 g.您可以直接传递一个Java点数组,并执行如下操作:

(let [point (aget some-array index)]
  (do-stuff-with-point point))

对于那些想要传入一个简单数据结构的情况,您已经将其格式化为Java中的Clojure,您可以将该参数作为字符串传入。因此,对于我在问题中给出的示例,我将忽略不计

"[[1 2] [3 4] [5 6]]"
作为我的阿格。使用invoke(arg)调用Clojure后,可以将函数的第一步设置为在arg上调用readString:

(defn foo [d]
  (def data (read-string d)))

当传入示例字符串时,上面的内容将生成一个向量。

好吧,我不完全确定我最终想要什么格式——现在主要是探索性的。您的解决方案肯定最适合对象。