分享您的想法,参与2024 年 Clojure 调查!

欢迎!请查看关于页面,了解如何使用本网站。

+3
语法和读取器

通常需要“深层”命名空间并将它们别名为较短的形式。例如:

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

有时,您希望在别名中包含更多上下文信息

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

这似乎可以工作,但是 Reader 的参考说明指出

'.' 具有特殊含义 - 它可以在符号中间出现一次或多次,以指定一个完全限定的类名,如 java.util.BitSet 或命名空间名称。以下划线 ('.') 开头或结尾的符号被 Clojure 保留。包含 / 或 . 的符号被称为 'qualified'。

强调:或者 在命名空间名称中 - 这是否包括命名空间别名的案例,或者应该避免使用因为它仅因为向后兼容性而有效?

另一种选择可以是:

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

2 个回答

+4

话虽如此,由于这种情况很少见

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

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

by
如果这是上下文中的一个已知约定,那么这似乎是合适的。
+1
by

别名仅在符号中表示命名空间名称(永远单独使用),因此我会将其解释为“在命名空间名称”范围内。

话虽如此,因为这不常见,我认为会让代码的读者错误地将点分隔的别名误认为是完全限定域名,所以请考虑其可读性。

...