【问题标题】: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)
    

    解决办法是:

    1. 使用ns 而不是in-ns,像这样:(ns my-namespace.core)
    2. 参考clojure.core,像这样:(clojure.core/refer-clojure)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 2014-08-20
      • 2021-10-06
      相关资源
      最近更新 更多