这是我的myns / junk.clj文件
(ns myns.junk
(:gen-class
:name booklist.util
:methods [[sq [int] int]]))
(defn sq [x] (* x x))
我正在运行lein ubserjar
而没有问题。我已经在我的java应用程序中导入了生成的jar,然后运行了这个
package javaapplication1;
import booklist.util;
public class JavaApplication1 {
public static void main(String[] args) {
util u = new util();
System.out.println(u.sq(45));
}
}
产生错误
线程“main”中的异常java.lang.UnsupportedOperationException:sq(myns.junk / -sq未定义?) at booklist.util.sq(Unknown Source) 在javaapplication1.JavaApplication1.main(JavaApplication1.java:14) C:\ Users \ X750JA \ AppData \ Local \ NetBeans \ Cache \ 8.2 \ executor-snippets \ run.xml:53:Java返回:1 BUILD FAILED(总时间:0秒)
我缺少什么,理想情况下,是否有任何类型的文档可以详细解释这些内容?
根据亚历杭德罗的回答编辑,我试过这个
(ns myns.junk
(:gen-class
:name booklist.util
:methods [[sq [int] int]]))
(defn sq [x] (* x x))
(defn -sq
"A Java-callable wrapper around the 'sq' function."
[n]
(sq n))
现在产生错误
线程“main”中的异常clojure.lang.ArityException:错误的args(2)传递给:junk / -sq 在clojure.lang.AFn.throwArity(AFn.java:429) 在clojure.lang.AFn.invoke(AFn.java:36) at booklist.util.sq(Unknown Source) 在javaapplication1.JavaApplication1.main(JavaApplication1.java:14) C:\ Users \ X750JA \ AppData \ Local \ NetBeans \ Cache \ 8.2 \ executor-snippets \ run.xml:53:Java返回:1 BUILD FAILED(总时间:0秒)
我最终得到的是这个
(ns myns.junk
(:gen-class
:name booklist.util
:methods [#^{:static true} [sq [int] int]]))
(defn -sq [x] (* x x))
(-sq 7) ; works - 49
所以我似乎需要将方法声明为static,并定义实际方法以在名称中包含前导短划线。
答案 0 :(得分:2)
你的clojure文件中缺少这样的东西
(defn -sq
"A Java-callable wrapper around the 'sq' function."
[n]
(sq n))
此外,您需要将方法定义为静态。
我认为规范性文档在这里:https://clojure.org/reference/compilation