отсутствие clojure.core в пространствах имен не по умолчанию в lein repl - PullRequest
0 голосов
/ 06 марта 2020

В lein repl, когда я делаю

(in-ns 'some-namespace-other-than-name.core)

clojure.core не включается по умолчанию.

Для объяснения, сначала я обнаружил, что меня ловят вот так

db.core=> (in-ns 'db.seed)
#object[clojure.lang.Namespace 0x12738ef5 "db.seed"]
db.seed=> (use 'environ.core)
Syntax error compiling at (form-init7774277424301430706.clj:1:1).
Unable to resolve symbol: use in this context

Я только что нашел, как это исправить:

db.seed=> (clojure.core/use 'clojure.core)
nil
db.seed=> (use 'environ.core)
nil

Мой вопрос, похоже, что clojure.core автоматически включается в пространство имен myapp.core, но не в другие пространства имен я мог бы переключиться на в ответе. (тем не менее, очевидно, что эти пространства имен do имеют доступ к clojure.core при запуске программы из основного пространства имен).

Это просто значение по умолчанию для leiningen?

Интересно, какие части понимания или использования я здесь упускаю.

Если мы запускаем программу, только myapp.core необходим доступ к clojure.core, а пространства имен - ваш .core будет ли самому использовать доступ к clojure.core, так как он сам при импорте просто импортирует в .core вашего приложения? Следовательно, переключение на какое-то другое пространство имен для запуска вещей по своей сути немного искусственно?

Я просмотрел документы для : main key в project.clj , но не смог найти ответ.

1 Ответ

3 голосов
/ 06 марта 2020

См. Эти две ссылки в ClojureDocs.org:

Я думаю, что проще просто использовать ns.

Также есть хорошая запись в блоге от 8thlight . Вы также должны прочитать How to ns .


Пример

Предположим, у меня есть основной ns demo.core и тестирование нс tst.demo.core. Я получаю доступ из repl:

~/expr/demo > lein repl
demo.core=> (in-ns 'tst.demo.core)
#object[clojure.lang.Namespace 0x6a2b14a1 "tst.demo.core"]
tst.demo.core=> (use 'demo.core)
Syntax error compiling at (/tmp/form-init10207825906790622351.clj:1:1).
Unable to resolve symbol: use in this context

Таким образом, вышеприведенная проблема показывает, что clojure.core не упоминается в ns in-ns.

В качестве альтернативы просто используйте ns:

~/expr/demo > lein repl
demo.core=> (ns tst.demo.core)       ; note absence of single-quote!
nil
tst.demo.core=> (use 'demo.core)     ; all clojure.core is automatically refered
nil
...