在较大的代码库和团队中,不同的人可能会使用不同的别名来 'require' 命名空间。
h.clj
(ns hello.core)
f.clj
(ns foo.core
(:require [hello.core :as hc]))
b.clj
(ns bar.core
(:require [hello.core :as h]))
如果您看到,我参与的大型项目通常会存在相同的命名空间具有不同别名的现象,即使保持了约定。这是一种人类错误,在较大的团队中,这通常会导致偏离轨道。这使得使用grep等简单工具查找命名空间和其中的函数用法变得更加困难(如上面的示例中执行 hc/some-func
或 h/some-func
)。
我想提出的是,在 ns 宏本身中可以有一些类似的内容
(ns hello.core :default-alias <my-alias>)
在需要此 ns 的任何地方
(ns foo.core
(:require [hello.core :default-alias])
我们将自动获得对命名空间的 <my-alias>
引用,因此我们可以执行 <my-alias>/some-func
这将导致在语言级别强制执行的统一代码
我相信这可以通过将某些元数据存储在命名空间中来实现