加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala中的链接包子句的动机是什么?

发布时间:2020-12-16 19:03:14 所属栏目:安全 来源:网络整理
导读:链接包装条款在 Scala 2.8中引入,如Martin Odersky在Scala site上所述. 我不太明白这个直觉. 以下是针对嵌套软件包的Scala书中的示例: package bobsrockets { package navigation { // In package bobsrockets.navigation class Navigator package tests {
链接包装条款在 Scala 2.8中引入,如Martin Odersky在Scala site上所述.
我不太明白这个直觉.

以下是针对嵌套软件包的Scala书中的示例:

package bobsrockets {
    package navigation {
        // In package bobsrockets.navigation
        class Navigator
        package tests {
            // In package bobsrockets.navigation.tests
            class NavigatorSuite
        }
    }
}

嵌套包的这种使用情况是有道理的,因为我们可以在同一个文件中使用多个嵌套包,但是新语法实现了与之前相同的功能,但没有括号.在简洁的Scala代码之间分离出这个包是不是很难?

package bobsrockets
package navigation
// In package bobsrockets.navigation
class Navigator
package tests
// In package bobsrockets.navigation.tests
class NavigatorSuite

请让我知道,如果我错了,或者我误解了这个概念.

解决方法

您可以按照示例所示的方式使用没有括号的语法,但是我从未在“现实生活中”中看到这一点.我认为几乎总是这个新功能只是用来获取父包的范围:

package bobrockets.navigation
package tests

//now the content of bobrockets.navigation is in scope

这与写作基本相同

package bobrockets.navigation.test
import bobrockets.navigation._

但是,第一个版本遵循DRY原则.例如.如果将bobrockets包重命名为robertsrockets,则可能会忘记在第二个版本中更改导入(可能指向一些“旧”代码),这在第一个版本中是不可能的.在某种意义上,这个(以及私有[bobsrockets.navigation])的修改器的可能性允许使用非常轻量级的语法将包组作为“模块”或“超级包”使用.

这是我知道的主要用法,但是Scala显示出令人惊奇的协同效应,并且以令人感兴趣的方式模糊了线条(例如,对象,包和对象之间,在val和对象之间,defs和函数之间等等).因此,如果此功能具有其他有用的应用程序,未来将显示.

[更新]这是Martin Odersky自己的一篇关于这个话题的新文章:http://www.artima.com/scalazine/articles/chained_package_clauses_in_scala.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读