【发布时间】:2016-03-21 21:43:44
【问题描述】:
为什么使用线程宏 ->> 在 cider-repl 中产生错误:
(-> "x..")
// Unable to resolve symbol: -> in this context
【问题讨论】:
为什么使用线程宏 ->> 在 cider-repl 中产生错误:
(-> "x..")
// Unable to resolve symbol: -> in this context
【问题讨论】:
当您在 repl 中创建一个新的命名空间并且尚未在其中定义 anything 时,就会发生这种情况。因此 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
【讨论】: