最近,我在我所在公司的项目中发现了一个bug。
基本上,发生的事情是在一个测试命名空间内部,我们导入了两不同的命名空间,我们可以称之为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的代码库中,这种情况偶尔会发生并造成heisenbug。唯一的解决方案是不是将spec名称空间放到定义它们文件的同一个ns中吗?