В мире Python, когда мне нужно что-то попробовать, я просто создаю новый файл a.py, вставляю код, который хочу попробовать, и запускаю его. Это работает из-за линии shebang #!/usr/bin/env python3 Что сообщает операционной системе, какой интерпретатор вызывать для файла.

Есть ли аналог этого в clojure? Я не хочу перескакивать через все этапы запуска lein new app и определения основных ns, каждый раз, когда я просто хочу проверить, что несколько строк кода делают в файле.

Обратите внимание, что я уже знаю о lein repl. И я пытался использовать это как шебанг #!/usr/bin/lein repl Но это просто вызывает ошибку Нет: основное пространство имен, указанное в project.clj .

0
nobody_nowhere 8 Окт 2018 в 11:19

2 ответа

Лучший ответ

Если у вас установлены инструменты CLI Clojure, вы можете использовать скрипты shebang:

test.clj :

#!/usr/bin/env clj

(def x 10)
(println "x =" x)

В терминале:

chmod +x test.clj
./test.clj

Выход:

x = 10

2
Piotrek Bzdyl 8 Окт 2018 в 08:53

Вы можете сделать это с помощью boot. См. https://github.com/boot-clj/boot/wiki/Scripts

Кроме того, ClojureVerse имеет ветку по этому поводу на https://clojureverse.org/ t / scripting-with-clj / 1618/5, где обсуждаются некоторые варианты.

Тем не менее, вы должны знать, что такой подход, вероятно, не очень полезен. С одной стороны, вы довольно часто хотите управлять зависимостями, с другой - время запуска JVM, в частности, когда вам нужно сначала скомпилировать некоторые источники Clojure. Если вам нужно запустить свой скрипт несколько раз, потому что вы пытаетесь что-то, время запуска быстро становится настоящим препятствием.

В качестве идеи я обычно держу проект leiningen для быстрых экспериментов. Здесь я могу настроить зависимости по мере необходимости и быстро запустить REPL, чтобы поработать с идеями и опробовать разные вещи. Для меня это не редкость, когда этот REPL работает, а Emacs уже подключен к нему.

1
Stefan Kamphausen 8 Окт 2018 в 08:53