2024 Clojure 状态调查中分享您的想法!

欢迎!请查看关于页面,了解更多有关其运作方式的信息。

+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]

如果这在上下文中是已知约定,那么看起来没问题。

别名仅作为符号(从未单独使用)中的命名空间名称,因此我会将其解释为包含在“命名空间名称”下。

尽管如此,因为这不常见,我认为代码的人类读者可能会将点号别名误认为是完整的限定命名空间名称,因此请考虑其对可读性的影响。

...