Я предполагаю, что запускается как скрипт Вы имеете в виду через clojure.main следующее:
java -cp clojure.jar clojure.main /path/to/myscript.clj
Если это так, то существует простая техника: поместите все функции библиотеки в отдельное пространство имен, например mylibrary.clj
Тогда myscript.clj может использовать / требовать эту библиотеку, как и ваш другой код. Но определенные функции в myscript.clj будут вызываться только при запуске в виде скрипта.
В качестве бонуса, это также дает вам хорошую структуру проекта, так как вы не хотите, чтобы специфичный для скрипта код смешивался с вашими общими функциями библиотеки.
РЕДАКТИРОВАТЬ:
Я не думаю, что в самом Clojure есть надежный способ определить, был ли отдельный файл запущен как сценарий или загружен как библиотека - с точки зрения Clojure, между ними нет 1015 * различий (все загружается одинаково через Компилятор .load (...) в исходном коде Clojure для всех, кто заинтересован).
Параметры, если вы действительно хотите определить способ запуска:
- Напишите основной класс на Java, который устанавливает статический флаг, а затем запускает скрипт Clojure. Вы можете легко проверить этот флаг из Clojure.
- Использование компиляции AOT для реализации основного класса Clojure, который устанавливает флаг
- Используйте * аргументы командной строки *, чтобы указать использование скрипта. Вам нужно будет передать дополнительный параметр, например «script», в командной строке.
- Использование метода, определяемого платформой, для определения командной строки (например, из переменных среды в Windows)
- Используйте параметр --eval в командной строке clojure.main , чтобы загрузить файл clj и запустить специальную функцию, которая представляет ваш скрипт. Затем эта функция может установить специфичный для скрипта флаг, если необходимо
- Используйте один из методов для определения основного класса Java во время выполнения