scala 中令人困惑的包命名约定

Hac*_*g J 3 scala sun-coding-conventions

我正在学习 scala,我正在查看 scala 风格指南的官方文档。但我很困惑为什么同样的表达同时是鼓励和劝阻。
根据Scala 风格指南,第一个package coolness是错误的,但在package coolness示例中间的第二个是正确的。

// wrong! this is definitely wrong
package coolness

// right! puts only coolness._ in scope
package com.novell.coolness

// right! puts both novell._ and coolness._ in scope
package com.novell
package coolness //but why is it OK?

// right, for package object com.novell.coolness
package com.novell
/**
 * Provides classes related to coolness
 */
package object coolness {
}
Run Code Online (Sandbox Code Playgroud)

已解决:我不知道超过 2 行的包声明与用点分隔的一行声明相同。

说起来 package com.novell.coolness都一样package com.novell; package coolness

Jör*_*tag 5

它在您引用的代码正上方说包名称应遵循 Java 包命名约定。Java 包命名约定规定包名应该是全局唯一的,这是通过使用在包作者控制下的 Internet 域名作为包名前缀来实现的。

例如,如果您控制 domain example.com,那么您可以使用任何包名称,例如com.example._您的包,但不能使用,例如com.microsoft.coolness.

所以,com.novell.coolness可以,因为它遵循上述规则(假设您是 Ray Noorda),但coolness不是,因为它不遵循该规则(或者,如果它遵循该规则,那么这意味着您在.根域命名空间的控制权,这几乎肯定不是真的,除非您是 ICANN)。

这实际上根本不是关于 Scala 的问题,而是关于 Java 包命名约定的问题,Scala 风格指南建议您遵循这些约定。