最近,我在我所在公司的项目中发现了一个错误。
基本上,发生的情况是在一个测试的命名空间中,我们引入了两个不同的命名空间,我们这里称它们为 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,这种情况偶尔会发生,并可能导致 healenbug。唯一的解决方案是将 spec 命名空间与定义它们的文件的同名空间保持一致吗?