繁体   English   中英

Scala中软件包的混淆命名约定

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM