Scala中的双包语句

Scala中的双包语句,scala,package,Scala,Package,我在一些库中见过,例如Spray,双包规格如下: package cc.spray package http // code 这只是cc.spray.http包的一个亮点,还是像这样将两者分开有功能上的好处?单独的包语句将cc.spray和cc.spray.http放在范围内。这相当于: package cc.spray.http import cc.spray._ // implicitly, import cc.spray.http._ 也就是说,包cc.spray和包cc.spray

我在一些库中见过,例如Spray,双包规格如下:

package cc.spray
package http

// code

这只是cc.spray.http包的一个亮点,还是像这样将两者分开有功能上的好处?

单独的包语句将
cc.spray
cc.spray.http
放在范围内。

这相当于:

package cc.spray.http
import cc.spray._
// implicitly, import cc.spray.http._
也就是说,包
cc.spray
和包
cc.spray.http
的每个成员都是可见的。另一方面,包
cc
的成员不可见


通过这种方式,您可以在其包层次结构中安全地使用名称,如
java
,而不会造成麻烦,同时,可以轻松地使希望可见的包范围可见。

与许多其他内容一样,这是Scala 2.8引入的:其他答案会告诉您“什么”(将多个包的作用域暴露于当前环境中)和官方的Scala文档,以及该功能的详细原理。

我们不要忘记从这种方法中获得的一个不错的胜利

// Foo.scala
package cc.spray
package http

class Foo {
  ...
}

// Bar.Scala
package cc.spray
package bar

import http._ // concise imports relative to cc.spray

class Bar {
  ...
}

就在你认为自己开始懂一门语言的时候,一些既懂又酷的东西出现了。。。