Как создать файл clojure в проекте Java с помощью плагина La Clojure?

1

Скажем, у нас есть проект 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);
Теги:
intellij-idea
clojure

2 ответа

1
Лучший ответ

Если вы используете 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

  • 0
    Спасибо, отлично работал для меня. Я также обновил свой вопрос. Пожалуйста, проверьте. Если я не буду объявлять и инициализировать IFn, то Java при попытке прочитать файл выдает «Exception in thread» main «java.lang.ExceptionInInitializerError». Почему? А как не использовать IFn, если не очень нужно?
3

В дополнение к комментарию Стива, который является правильным ответом на этот вопрос, обратите внимание также, что Cursive (основанный на старой вилке La Clojure, которая больше не находится в активной разработке) обеспечивает поддержку этих вызовов (как API, так и RT.var). Вы можете перейти к коду Clojure с Java, "Поиск использования из Clojure" найдет использование Java, и у вас есть автозаполнение строк Java. Это очень помогает, когда вы должны использовать эти формы. Полное раскрытие: я развиваю Курсив, я добавил все это, потому что я много использую его в Cursive.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню