2015-06-16 90 views
0

我是Clojure的新手,所以這可能是一個簡單的問題。我在使用Leiningen時遇到了REPL問題。Leiningen REPL不自動加載project.core命名空間

以前,我在創建一個app項目時遵循了一個教程。當我在該項目中使用lein repl啓動REPL時,它總是會自動將我置於項目的核心名稱空間中。即使我在該名稱空間中,仍然可以訪問內置資源,例如(doc build-in-function-name)

現在,我創建了另一個非應用程序項目,我似乎失去了這種自動加載功能。我現在被默認放入一個user命名空間。此外,當我嘗試通過執行(in-ns 'project.core)來訪問我的項目的核心名稱空間時,我無法訪問像doc這樣的內置函數。

任何人都可以解釋這裏發生了什麼?

+0

可能你應該使用「clojure.repl」命名空間。我認爲lein repl在每個其他命名空間中自動加載「clojure.repl」命名空間。 – JustAnotherCurious

回答

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。

+0

'(load「core」)'適用於我。 – Kris