在尝试加载一个与其文件名不匹配的命名空间声明文件后,tools.namespace依赖追踪器可能进入不一致状态。
重现步骤
在一个新的Clojure项目中,在类路径上创建一个名为{{foo.clj}}的文件,其中包含命名空间声明{{(ns wrong-ns-declaration-for-foo)}}。
然后在REPL中
`
user=> (use 'clojure.tools.namespace.repl)
nil
user=> (refresh)
:reloading (wrong-ns-declaration-for-foo)
:error-while-loading wrong-ns-declaration-for-foo
`
编辑文件{{foo.clj}},使其命名空间声明正确:{{(ns foo)}}。
但在REPL中,{{refresh}}仍然不工作
`
user=> (refresh)
:reloading (foo wrong-ns-declaration-for-foo)
:error-while-loading wrong-ns-declaration-for-foo
`
自tools.namespace 0.2.5以来,解决方案是调用{{clear}}。
user=> (clear) {} user=> (refresh) :reloading (foo) :ok