请在2024年Clojure现状调查中分享您的想法!

欢迎!请查看关于页面以了解更多关于这个网站的信息。

+3投票
语法和Reader

通常 requiring "深层" 的命名空间并将它们简称为更短的形式。

(require '[my.deep.namespace.db.utils :as utils])

但有时我们希望在别名中包含更多上下文。

(require '[my.deep.namespace.db.utils :as db.utils])

这似乎有效,但Reader的引用说明

'.'有特殊含义 - 它可以在符号的中间 使用一次或多次以指定完全限定的类名,例如java.util.BitSet,或者在命名空间名称中。以'.'开头的符号或以'.'结尾的符号被Clojure保留。包含/或.的符号被认为是已限定。

强调:在命名空间名称中 —— 这是否包括命名空间别名的情形,或者应该避开因为它仅因为向后兼容性而工作?

另一种可能的做法是:

(require '[my.deep.namespace.db.utils :as db-utils])

2个回答

+4投票

话虽如此,因为这种情况不常见

在我工作的公司中,这是一种好的模式

[com.company.project.lib.entity :as lib.entity]

如果在该上下文中这是一个已知惯例,那么看起来是好的。
+1 投票

别名仅在符号(从不独立使用)中作为命名空间名称使用,因此我会将其理解为在“命名空间名称中”得到覆盖。

话虽如此,因为这种情况不常见,我认为代码的代码阅读者可能将点分隔的别名误认为是完整的命名空间名称,所以请考虑这一点,以及可读性。

...