在较大的代码库和团队中,不同的人可能会对命名空间使用不同的别名进行 '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
这将导致在语言层面上强制执行的代码一致性
我相信这可以通过在命名空间中存储某种元数据来实现