当尝试加载文件时,如果命名空间声明与文件名称不匹配,则 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