在大型代码库和团队中,可能不同的人会对同一个命名空间使用不同的别名进行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>)
在require此ns的地方
(ns foo.core
(:require [hello.core :default-alias])
我们将自动获得一个引用命名空间的 <my-alias>
,因此我们可以执行 <my-alias>/some-func
这将导致在语言级别强制执行一致的代码
我相信这可以通过在命名空间中存储某种类型的元数据来实现