在大型代码库和团队中,可能会出现不同的人以不同的别名'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
这将导致在语言级别上强制执行的一致代码
我认为这可以通过在命名空间中存储某种类型的元数据来实现