【问题标题】:Confusing naming convention for package in scalascala中包的令人困惑的命名约定
【发布时间】:2019-04-26 13:47:03
【问题描述】:

我正在学习 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.coolnesspackage com.novell; package coolness 相同

【问题讨论】:

    标签: scala sun-coding-conventions


    【解决方案1】:

    我只是想补充一点关于基本原理的内容。 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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-11
        • 1970-01-01
        • 2017-09-16
        • 1970-01-01
        • 2020-10-17
        相关资源
        最近更新 更多