scala中包的混淆命名约定

Confusing naming convention for package in scala

我正在学习 Scala,我正在查看 Scala 风格指南的官方文档。但是我很困惑为什么同一个表情同时是鼓励和劝阻。
根据 scala style guide,第一个 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 {
}

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

说到, package com.novell.coolness 相同 package com.novell; package coolness

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

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

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

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

我只想补充一点理由。 Jorg 所说的一切都是正确的:以下两个声明相同的包

package com.novell.coolness

package com.novell
package coolness

但后者有一个优势。假设我的项目结构有这三个包

com.novell.coolness
com.novell.morecoolness
com.novell.utilities.coolness

现在,我正在 com.novell.coolness 中编写一个文件,该文件需要使用其他两个包中的一些内容。如果我们使用第一个约定,我们得到

package com.novell.coolness

import com.novell.morecoolness.MyClass
import com.novell.utilities.coolness.MyOtherClass

然而,如果我们使用第二种约定,我们得到

package com.novell
package coolness

import morecoolness.MyClass
import utilities.coolness.MyOtherClass

所以 com.novell 实际上在范围内,我们可以将 relative 导入它。如果您有多个来自您自己的项目但位于不同包中的导入,这会非常方便,因为它消除了每个导入中的 com.novell