Clojure 2024 年调查问卷 中分享您的想法!

欢迎!请访问 关于 页面以了解更多关于如何使用本网站的信息。

+3
语法和阅读器

通常需要“深层”的命名空间并将其别名为较短的名称。例如

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

有时你可能希望在别名中得到更多的上下文

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

这似乎是可行的,但阅读器引用中提到

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

强调:或在命名空间中 —— 这是否包括命名空间的情况,还是应该避免使用,因为它仅因为向后兼容性才有效?

另一种选择可能是

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

2 个回答

+4

话虽如此,因为这是不常见的

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

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

by
如果在上下文中这是已知的约定,那么看起来很好。
+1
by

别名仅用作符号中的命名空间名称(从不单独使用),因此我会把它理解为在“命名空间名称”范围内。

话虽如此,因为这不常见,我认为读者可能会误将点分隔的别名视为完全合格的命名空间名称,所以请考虑可读性。

...