繁体   English   中英

从Java传递Args到Clojure

[英]Passing Args to Clojure from Java

我想将Clojure代码嵌入到Java中。 这个站点有助于设置它的基础知识,但它传递的唯一arg是String类型。 我也试过使用整数,这些也有效。

我的问题是是否有一些格式化的方法将结构化数据传递给Clojure。 特别是,我有一个我希望传递给Clojure的点列表,并变成一个看起来像这样的向量:

[[1 2] [3 4] [5 6]]

这样做最简单的方法是什么? 有没有我可以在Java端做的预处理,或者我应该在Clojure结束时进行后处理,还是在Clojure中有什么东西可以处理这个? 我怀疑它传递了一串数字和每个元组到Clojure的长度,并让它将String处理成一个向量。 然而,Clojure的这个方面没有很多例子,我很好奇我是否遗漏了一些明显的东西。

编辑:请看mikera的答案是你对传递Java Objects感兴趣。 如果您只是想提前将数据格式化为集合/地图/等的Clojure格式,请查看下面的答案。

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

例如,您可以直接传递一个Java数组的点,并执行以下操作:

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

对于那些想传递一个简单的数据结构的情况,你已经格式化为Java中的Clojure,你可以将该arg作为字符串传递。 因此,对于我在问题中提出的例子,我会传入

"[[1 2] [3 4] [5 6]]"

作为我的arg。 当你使用invoke(arg)调用Clojure时,你可以让你的函数的第一步是在你的arg上调用readString:

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

传递示例String时,上面将生成一个向量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM