为什么使用线程宏 ->> 在 cider-repl 中产生错误:
(-> "x..")
// Unable to resolve symbol: -> in this context
当您在 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 中有一个方便的函数,它将为您的新命名空间添加所有预期的引用。ns
当您从顶部带有宏的文件创建命名空间时,您不需要这样做,因为ns
这样做对您有用(以及其他有用的东西):
i-dont-exist-yet> (clojure.core/refer-clojure)
nil
i-dont-exist-yet> (-> 1)
1