Ошибка оценки символа Clojure
-
28-10-2019 - |
Вопрос
Итак, сейчас у меня есть этот код:
родовое словоПосле генерации кода кода в Emacs я получаю следующий результат:
родовое словоНо когда я генерирую код-код и запускаю полученный файл jar, я получаю сообщение об ошибке:
родовое словоИтак, у меня два вопроса:
- Почему uberjar не работает точно так же, как REPL?
- Что я могу сделать, чтобы решить эту проблему?
Решение
1. Почему uberjar работает иначе, чем REPL?
Причина ошибки «NO_SOURCE_PATH» заключается в том, что вы в данный момент не находитесь в пространстве имен, которое определило 'foo.
Чтобы проиллюстрировать: если я оцениваю ваш код в моем REPL и выполняю его, он помещает меня в пространство имен contact-form.core
, как и следовало ожидать, потому что (ns contact-form.core)
оценивается REPL, но если я переключусь на пространство имен user
и вызову -main
, я могу произвести ту же ошибку:
Таким образом, указав точку входа в main
для автономного выполнения uberjar (вне REPL), это эквивалентно вызову (contact-form.core/-main)
из пространства имен по умолчанию в вашем банке, которое является clojure.core
, потому что (ns contact-form.core
) не оценивался. Результат: main
может быть выполнен с полным путем (в пространстве имен) к функции, но ни один из символов из contact-form.core
не доступен в текущем пространстве имен по умолчанию.
2. Исправление
Решением было бы сначала явно переключиться на ваше пространство имен:
родовое слово