欢迎!请参阅 关于 页面,了解有关其工作方式的更多信息。
我们必须引入具有副作用(如 multimethod 或协议实现)的命名空间。因此,一个初始命名空间中有许多吵闹的 require 形式。
使用 tools.namespace 来引入所有应用程序命名空间是否更好?
如提问所示:"使用 tools.namespace 强制要求所有应用程序命名空间是否常见?"
不是,绝对不是“常见”。
在许多命名空间中实现 multimethod/protocol(否则不使用这些 multimethods/protocols 的代码所需的)多方法/协议并不特别“常见”,因此它们的要求列表特别“嘈杂”。
tools.deps 在命名空间中有许多供应商实现分布,但它要求入门命名空间中所有内置的一起使用该库的其他代码。参见 https://github.com/clojure/tools.deps.alpha/tree/860bc7e3e310380b3baf9b43b05d343f3ae812f6/src/main/clojure/clojure/tools/deps/alpha.clj#L17-L22——我不知道你是否认为它是“嘈杂的”?
tools.deps
如果您的确有许多不太可能被其他代码需要的实现命名空间,因此需要在与启动接近的位置加载,那么我会首先考虑创建一个临时命名空间,它会进行相关引用,然后在您的初始命名空间中只引用这个临时命名空间。
如果这仍然感觉过于繁琐,我可以考虑使用 tools.namespace 自动查找和加载实现命名空间,前提是它们遵循适当的模式。但在我迄今为止生产的Clojure中,八年中我从未遇到过这种需求。
tools.namespace