Leiningen REPL不自动加载project.core命名空间

时间:2015-06-16 05:02:44

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

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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。

相关问题