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