【问题标题】:Why do I lose all symbols when using in-ns to move to a new namespace?为什么在使用 in-ns 移动到新命名空间时会丢失所有符号?
【发布时间】:2017-05-08 03:45:23
【问题描述】:
在 Leiningen REPL 中运行以下代码:
(in-ns 'my-namespace.core)
(+ 2 2)
导致此错误:
CompilerException java.lang.RuntimeException: Unable to resolve symbol: + in this context
为什么?
【问题讨论】:
标签:
clojure
namespaces
leiningen
read-eval-print-loop
【解决方案1】:
当您使用in-ns 创建新命名空间时,默认情况下不会引用核心命名空间 (clojure.core)。 “引用”命名空间意味着将其包含在您的命名空间中,以便您可以将该命名空间的符号作为您自己的符号引用。
仍然可以通过 完全限定名称 使用来自 clojure.core 的符号,如下所示:
(clojure.core/+ 2 2)
解决办法是:
- 使用
ns 而不是in-ns,像这样:(ns my-namespace.core)
- 参考
clojure.core,像这样:(clojure.core/refer-clojure)