По следующей ссылке Вызов clojure из java , показано, как написать фрагмент кода clojure, функциональность которого мы можем затем вызывать непосредственно в исходном коде java. Для воспроизведения у нас есть проект clojure с именем tiny, в котором есть исходный файл tiny.clj. Файл tiny.clj содержит следующий код:
(ns tiny
(:gen-class
:name com.domain.tiny
:methods [#^{:static true} [binomial [int int] double]]))
(defn binomial
"Calculate the binomial coefficient."
[n k]
(let [a (inc n)]
(loop [b 1
c 1]
(if (> b k)
c
(recur (inc b) (* (/ (- a b) b) c))))))
(defn -binomial
"A Java-callable wrapper around the 'binomial' function."
[n k]
(binomial n k))
(defn -main []
(println (str "(binomial 5 3): " (binomial 5 3)))
(println (str "(binomial 10042 111): " (binomial 10042 111)))
)
Затем он экспортируется в файл ttt.jar, который затем добавляется в «Библиотеки ссылок» проекта tinyJava (который является проектом Java). Внутри проекта tinyJava есть файл Main.java, который имеет следующий код:
import com.domain.tiny;
public class Main {
public static void main(String[] args) {
int j;
j = (int)tiny.binomial(5, 3);
System.out.println("(binomial 5 3): " + j);
System.out.println("(binomial 10042, 111): " + tiny.binomial(10042, 111));
}
}
Выходные данные тогда:
(binomial 5 3): 10
(binomial 10042, 111): 4.9068389575068143E263
Мой вопрос в следующем месте Main.java:
j = (int)tiny.binomial(5, 3);
возможно ли войти в исходный код clojure? Я пытался, и это не сработало.
Спасибо
[РЕДАКТИРОВАТЬ]: я добавил банку в Библиотеки со ссылками следующим образом:
1) Щелкните правой кнопкой мыши на проекте tinyJava и выберите свойства
2) Выберите: Java Build Path
3) Выберите: Библиотеки
4) Нажмите: «Добавить внешние банки»
5) Затем перейдите в папку ttt.jar
[РЕДАКТИРОВАТЬ 2]: Похоже, что для проекта scala этого можно достичь несколько иным способом (см. Ниже), в котором можно связать проекты вместо явного экспорта файла jar.