私はいくつかのライブラリで見ました。たとえば、Sprayは、次のようなデュアルパッケージ仕様です。
package cc.spray
package http
// code
これはパッケージcc.spray.httpの単なる目玉ですか、それともこのように2つを分解することには機能的な利点がありますか?
これはこれと同等です:
package cc.spray.http
import cc.spray._
// implicitly, import cc.spray.http._
つまり、パッケージcc.spray
とパッケージのすべてのメンバーcc.spray.http
が表示されます。一方、パッケージのメンバーは表示cc
されません。
このようにして、問題を発生させることなく、パッケージ階層などの名前を安全に使用できるjava
と同時に、表示したいパッケージスコープを簡単に表示できます。
個別のパッケージステートメントは、との両方cc.spray
をcc.spray.http
スコープに入れます。
このアプローチから得られた1つの素晴らしい勝利を忘れないでください
// 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 {
...
}
他の多くのものと同様に、これはScala 2.8で導入されました。他の回答は「何」(現在のコンテキストに複数のパッケージスコープを公開する)を提供し、公式のScalaドキュメントには詳細な理論的根拠とともにより多くの詳細があります機能。