Скажем, у нас есть проект Java в IntelliJ Idea с плагином La Clojure
и библиотека clojure.jar
импортированная как внешняя библиотека.
Я хотел бы добавить Clojure file.clj
в нашу структуру Java Project и использовать функции из этого файла для моих дальнейших внутренних целей.
Как создать файл clojure в проекте Java, а затем использовать код clojure? Я просмотрел несколько вариантов, но это не сработало для меня или просто недостаточно. Даже на YouTube есть много фиктивных видеороликов, в которых показано, как запускать реплику, но ничего о том, как соединить Java и clojure вместе, и превратить это в легкую, приятную и удобную дисциплину программирования. Например:
input.clj:
(defn foo [a b] (str a " " b))
Hello.java
public class Hello {
psvm {
//invoke: (foo "Hello from file.clj")
}
}
Обновление: спасибо за вашу помощь, просто начал использовать Clojure 1.6.0 и не ожидал, что это будет так просто.
/** Question: If I won't declare and init IFn, then Java throws "Exception
* in thread "main" java.lang.ExceptionInInitializerError" during an attempt
* to read the file. Why? And how not to use IFn if not really necessary?
*/
IFn require = Clojure.var("clojure.core", "require");
// Import file input.clj with a bunch of functions
clojure.lang.Compiler.loadFile("input.clj");
// Call foo
IFn foo = Clojure.var("clojure.core", "foo");
Object result = foo.invoke("Hi", "there");
// Feel good
System.out.println(result);
Если вы используете Clojure 1.6, посмотрите на qaru.site/questions/40896/... и http://clojure.github.io/clojure/javadoc/clojure/java/api/package-summary.html
Для Clojure 1.5 вам нужно будет использовать clojure.lang.RT
В дополнение к комментарию Стива, который является правильным ответом на этот вопрос, обратите внимание также, что Cursive (основанный на старой вилке La Clojure, которая больше не находится в активной разработке) обеспечивает поддержку этих вызовов (как API, так и RT.var). Вы можете перейти к коду Clojure с Java, "Поиск использования из Clojure" найдет использование Java, и у вас есть автозаполнение строк Java. Это очень помогает, когда вы должны использовать эти формы. Полное раскрытие: я развиваю Курсив, я добавил все это, потому что я много использую его в Cursive.