【问题标题】:How do I call a Clojure function that takes a two-dimensional array of Strings from Java?如何调用从 Java 获取二维字符串数组的 Clojure 函数?
【发布时间】:2014-12-01 14:54:25
【问题描述】:

基本上问题说明了一切。

当我在 gen-class 中声明函数签名时,我为二维字符串数组设置什么类型?

[myFunc [XXXX] ReturnType]

我要为 XXXX 放什么?

更新:按照@Mark Topolnik 的建议,我正在尝试

#^{:static true} [myFunc [ ^"[[Ljava.lang.String;" ] clojure.lang.IFn] 

在我的声明中,我得到了一个

java.lang.RuntimeException: Unmatched delimiter: ]

当我尝试编译时出现运行时异常。

更新 2:通过从上面的行中删除 ^ 来修复。 (这是在 gen-class 中声明函数签名的上下文中,因此 ^ 可能是不必要的。)

【问题讨论】:

  • 相关:stackoverflow.com/questions/3779876/how-to-type-hint。所以我猜^"[[Ljava.lang.String" strings 将是唯一(丑陋)的方式。
  • 那不是一维数组吗?
  • 初始开括号的数量指定数组的深度。
  • 谁知道L作为助记符代表什么,但它的意思是“引用类型”,并且需要跟随类型的完全限定名称,以;结尾(我忘了那个在我的评论中)。
  • @MarkoTopolnik,看起来你回答了 cmets 中的问题。不应该把它记录为官方答案,让interstar接受吗?

标签: java clojure clojure-java-interop


【解决方案1】:

Clojure 中不直接支持多维数组类型,但您始终可以回退到使用带有二进制类型名称的 String。在您的情况下,这将如下所示:

[myFunc ["[[Ljava.lang.String;"] ReturnType]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 2010-12-19
    • 2019-08-10
    • 2019-09-24
    相关资源
    最近更新 更多