【问题标题】:Leiningen REPL not autoloading project.core namespace [duplicate]Leiningen REPL 不自动加载 project.core 命名空间 [重复]
【发布时间】:2015-06-16 05:02:44
【问题描述】:

我是 Clojure 的新手,所以这很可能是一个简单的问题。我在使用 Leiningen 时遇到了 REPL 问题。

之前,我在学习教程时创建了一个app 项目。当我在该项目中使用lein repl 启动REPL 时,它总是会自动将我置于项目的核心命名空间中。即使我在那个命名空间中,我仍然可以访问内置资源,例如(doc build-in-function-name)

现在,我创建了另一个非应用项目,但我似乎失去了这种自动加载功能。默认情况下,我现在被放入 user 命名空间。此外,当我尝试通过执行 (in-ns 'project.core) 来访问我的项目的核心命名空间时,我无法访问像 doc 这样的内置函数。

谁能解释这里发生了什么?

【问题讨论】:

  • 也许你应该使用“clojure.repl”命名空间。我认为 lein repl 在每个其他命名空间中自动加载“clojure.repl”命名空间。

标签: clojure namespaces read-eval-print-loop


【解决方案1】:

in-ns 不加载代码。它切换到 ns,如果需要,创建它。它也不执行默认的 ns 设置(例如,引用 clojure.core)。从 repl 中的代码加载命名空间的正确方法是使用 require (require 'some.ns),如果成功,则可以在其后加上 (in-ns 'some.ns)

您可以使用 project.clj 中的 :repl-options {:init-ns some.ns} 选项来指定 leiningen 应该自动加载到您的 repl 中的命名空间。当它由我决定时,我不使用此选项,因为如果有任何错误阻止我的代码加载,它会阻止我获得可用的 repl。

【讨论】:

  • (load "core") 为我工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 2013-11-25
  • 2014-04-13
  • 1970-01-01
相关资源
最近更新 更多