- About Scala
- Documentation
- Code Examples
- Software
- Scala Developers
A Tour of Scala: Packages
Created by admin on 2008-07-05.
Updated: 2008-12-21, 01:10
A package is a special object which defines a set of member classes, objects and packages. Unlike other objects, packages are not introduced by a definition.
A packaging package p { ds } injects all definitions in ds as members into the package whose qualified name is p. Members of a package are called top-level definitions. If a definition in ds is labeled private, it is visible only for other members in the package.
A protected modifier can be qualified with an package identifierp(e.g.protected[p]). Members labeled with such a modifier are also accessible from all code inside the packagep.
Selections p.m from p as well as imports from p work as for objects. However, unlike other objects, packages may not be used as values. It is illegal to have a package with the same fully qualified name as a module or a class.
Top-level definitions outside a packaging are assumed to be injected into a special empty package. That package cannot be named and therefore cannot be imported. However, members of the empty package are visible to each other without qualification.
A compilation unit package p; stats starting with a package clause is equivalent to a compilation unit consisting of a single packaging package p { stats }.
Several packages may be declared in the same Scala source file:
package p1 { object test extends Application { println("p1.test") } } package p2 { object test extends Application { println("p2.test") } }
Import clauses
An import clause has the form import p.I where the import expression I determines a set of names of members of p which are made available without qualification. For example:
| The clause | makes available without qualification.. |
import p._ |
all members of p (this is analogous to import p.* in Java). |
import p.x |
the member x of p. |
import p.{x => a} |
the member x of p renamed as a. |
import p.{x, y} |
the members x and y of p. |
import p1.p2.z |
the member z of p2, itself member of p1. |
Futhermore the clause import p1._, p2._ is a shorthand for import p1._; import p2._.
Implicitly imported into every compilation unit are, in that order:
- the package
java.lang, - the package
scala, - and the object
scala.Predef.
Members of a later import in that order hide members of an earlier import.









