clojure.tools.namespace刷新所有后clojure.repl命名空间丢失

时间:2015-05-01 17:18:18

标签: emacs clojure

我不确定这是预期还是错误,但在运行(clojure.tools.namespace.repl/refresh-all)后,clojure.repl命名空间将丢失。

nREPL server started on port 61579 on host 127.0.0.1 nrepl://127.0.0.1:61579
REPL-y 0.3.5, nREPL 0.2.7
Clojure 1.6.0

testbed.core=> (doc map)
-------------------------
clojure.core/map
([f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3 & colls])
Returns a lazy...
nil
testbed.core=> (require 'clojure.tools.namespace.repl)
nil
testbed.core=> (clojure.tools.namespace.repl/refresh-all)
:reloading (testbed.core testbed.core-test)
:ok
testbed.core=> (doc map)

CompilerException java.lang.RuntimeException: Unable to resolve symbol: doc in this context, compiling:(/private/var/folders/xs/jbvb_r6j07q8xtclwlcbm21h0000gn/T/form-init6764593924445976503.clj:1:1)
testbed.core=>

我的project.clj非常简单:

(defproject testbed "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.6.0"]]
  :main ^:skip-aot testbed.core
  :target-path "target/%s"
  :profiles {:uberjar {:aot :all}
             :dev {:dependencies [[org.clojure/tools.namespace "0.2.10"]]}})

有一种简单的方法可以避免这种情况吗?特别是在运行Emacs / CIDER时?

1 个答案:

答案 0 :(得分:3)

我记得有这个问题。虽然已经有一段时间了,但我记得通过设置我的lein项目来启动命名空间user中的repl并导入其他命名空间 - 而不是从项目命名空间开始(由{定义)来解决这个问题。 {1}})。

所以我向:main添加了:repl-options {:init-ns user}并创建了一个项目project.clj - 确保我需要的user.clj个功能始终可用 - 正如Stuart Sierra所述&# 39;帖子"My Clojure Workflow, Reloaded"

会话:

clojure.repl

这是一种解决方法,而不是对行为的真正修复或解释。另一种方法可能是确保