我不确定这是预期还是错误,但在运行(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时?
答案 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
这是一种解决方法,而不是对行为的真正修复或解释。另一种方法可能是确保