在大型代码库和团队中,可能会出现不同的人用不同的别名来 '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>)
在wherever这个ns被require时
(ns foo.core
(:require [hello.core :default-alias])
我们可以自动获得一个<my-alias>
来引用命名空间,这样我们就可以做<my-alias>/some-func
这将导致代码的一致性,并在语言级别上执行
我认为这可以通过在命名空间中存储某种类型的元数据来实现