最近,我在我工作的公司的一个项目中发现了一个错误。
基本上,发生的事情是在一个测试命名空间中导入了两个不同的命名空间,我们可以称它们为first-ns和second-ns。
first-ns和second-ns都定义了具有相同名称的spec,如下所示:
(ns first-ns)
(s/def :same/name
int?)
(ns second-ns)
(s/def :same/name
string?)
我的问题是,是否有方法使Clojure编译器对这种类型的名称冲突发出警告?在大型的代码库中,有数百个spec时,这种情况偶尔会发生,并可能导致海森堡bug。唯一的方法是将spec名称空间化为与它们定义文件相同的ns吗?