Макросы в Cider repl (например ->)
Почему используется макрос многопоточности ->> выдает ошибку в cider-repl:
(-> "x..")
// Unable to resolve symbol: -> in this context
1 ответ
Это происходит, когда вы создаете новое пространство имен в repl и еще ничего не определили в нем. поэтому псевдонимы для функций clojure.core еще не установлены:
Начнем с создания нового пустого пространства имен:
user> (in-ns 'i-dont-exist-yet)
#namespace[i-dont-exist-yet]
Затем попробуйте использовать макрос потоков (или что-нибудь из clojure.core):
i-dont-exist-yet> (-> 1)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: -> in this context, compiling:(*cider-repl api*:47:18)
который не может найти символ ->
в текущем пространстве имен, хотя это работает, если вы скажете ему, какое пространство имен использовать явно:
i-dont-exist-yet> (clojure.core/-> 1)
1
В clojure.core есть удобная функция, которая добавит все ожидаемые ссылки для вашего нового namespce. Вам не нужно будет делать это, когда вы создаете свое пространство имен из файла с ns
макрос в верхней части, потому что ns
делает это для вас (среди других полезных вещей):
i-dont-exist-yet> (clojure.core/refer-clojure)
nil
i-dont-exist-yet> (-> 1)
1