Это мой файл myns/junk.clj
(ns myns.junk
(:gen-class
:name booklist.util
:methods [[sq [int] int]]))
(defn sq [x] (* x x))
Я запускаю lein ubserjar
без проблем. Я импортировал сгенерированную банку в свое Java-приложение, а затем запустил это
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 не определено?) в booklist.util.sq(неизвестный источник) в 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))
который теперь выдает ошибку
Исключение в потоке «основной» clojure.lang.ArityException: неправильное количество аргументов (2) передано: junk/-sq в clojure.lang.AFn.throwArity(AFn.java:429) в clojure.lang.AFn.invoke( AFn.java:36) в booklist.util.sq(неизвестный источник) в 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
Итак, кажется, мне нужно объявить метод статическим и определить фактический метод, чтобы в имени был начальный тире.