代码之家  ›  专栏  ›  技术社区  ›  cryptic_star

从Java传递ARCG到CLUJEUE

  •  6
  • cryptic_star  · 技术社区  · 15 年前

    我想把Culjule代码嵌入到Java中。 This 站点在设置这个的基础上很有帮助,但它传递的唯一参数是string类型。我也尝试过使用ints,这些也可以。

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

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

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

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   mikera    15 年前

    它首先取决于数据的格式,但您可能会发现,只需直接传递代表数据的Java对象,并使用CuljEube的Java互操作特性读取它,就最简单了。

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

    (let [point (aget some-array index)]
      (do-stuff-with-point point))
    
        2
  •  1
  •   cryptic_star    15 年前

    对于那些想要传递一个简单的数据结构的情况,您已经将其格式化为爪哇中的Culjure,则可以将该ARG传递为字符串。所以就我在问题中给出的例子来说,我会通过

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

    作为我的ARG。当使用invoke(arg)调用clojure时,可以将函数的第一步设置为对arg上readstring的调用:

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

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