[英]Confusing naming convention for package in scala
我正在学习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 {
}
解决 :我不知道超过2行的包声明与用点分隔的一行声明相同。
说到package com.novell.coolness
就是package com.novell; package coolness
package com.novell; package coolness
它在您引用的代码上方说,程序包名称应遵循Java程序包命名约定。 Java软件包命名约定规定,软件包名称应该是全局唯一的,这是通过使用Internet域名来实现的,该域名在软件包作者的控制下作为软件包名称的前缀。
例如,如果您控制域example.com
,则可以对包使用com.example._
类的任何包名称,但不能使用com.microsoft.coolness
这样的包名称。
所以, com.novell.coolness
是好的,因为它遵循上述规则(假设你是雷·诺达),但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
实际上在范围内,我们可以相对于它导入。 如果您有多个导入来自您自己的项目但驻留在不同的程序包中,则这会非常方便,因为它消除了每个导入中的com.novell
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.