我是Clojure的新手,所以这很容易成为一个简单的问题。我在使用Leiningen时遇到了REPL的问题。
以前,我在遵循教程的同时创建了一个app
项目。当我使用lein repl
启动带有该项目的REPL时,它总是会自动将我放入项目的核心命名空间中。即使我在该命名空间中,我仍然可以访问内置资源,例如(doc build-in-function-name)
等等。
现在,我已经创建了另一个非app项目,我似乎已经失去了这种自动加载功能。我现在被默认放入user
命名空间。此外,当我尝试通过(in-ns 'project.core)
访问项目的核心命名空间时,我无法访问doc
等内置函数。
有谁能解释这里发生了什么?
答案 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。