12.1. Definiowanie pakietów
Kod programów pisanych w Scali może być grupowany w pakietach. Na początku pliku źródłowego można umieścić klauzulę pakietu w postaci słowa kluczowego package, po którym umieszczona jest nazwa pakietu. Kod z pliku Packages1.scala definiuje obiekt A w pakiecie a.
Plik Packages1.scala: package a object A
Pełną nazwą tego obiektu jest a.A.
scala> a.A res0: a.A.type = a.A$@199c6b5
W jednym pliku można umieścić więcej klauzul pakietu. W pliku Packages2.scala znajdują się dwie takie klauzule.
Plik Packages2.scala: package b1 package b2 object B1 class B2
W tym pliku zdefiniowane są obiekt b1.b2.B1 oraz klasa b1.b2.B2.
scala> b1.b2.B1 res1: b1.b2.B1.type = b1.b2.B1$@1bb571c scala> new b1.b2.B2 res2: b1.b2.B2 = b1.b2.B2@1d2ade3
Klauzule pakietu powinny znajdować się na początku pliku. Klauzula
package c2, z wiersza
, z pliku Packages3.scala, znajduje się po
definicji obiektu C1 z wiersza
, co jest nieprawidłowe.
Plik Packages3.scala: package c1 object C1
package c2
class C2
Kod z pliku Packages3.scala nie kompiluje się.
$ scalac Packages3.scala
Packages3.scala:4: error: '{' expected but ';' found.
class C2
^
one error found
Klauzula pakietu może zawierać nazwę złożoną z dwóch lub więcej nazw pakietów połączonych kropkami.
Plik Packages4.scala: package d1 package d2.d3 object D1 class D2
W pliku Packages4.scala są zdefiniowane obiekt d1.d2.d3.D1 oraz klasa d1.d2.d3.D2.
scala> d1.d2.d3.D1 res0: d1.d2.d3.D1.type = d1.d2.d3.D1$@1fb0bed scala> new d1.d2.d3.D2 res1: d1.d2.d3.D2 = d1.d2.d3.D2@225dd7
Oprócz klauzuli pakietu można stosować instrukcje pakietu, określające zasięg swojego działania za pomocą nawiasów klamrowych. Instrukcje pakietu mogą być stosowane nie tylko na początku pliku.
Plik Packages5.scala: package e1 object E1 package e2 { object E2 } package e3.e4 { class E3 }
W pliku Packages5.scala zdefiniowano obiekty e1.E1 i e1.e2.E2 oraz klasę e1.e3.e4.E3.
scala> e1.E1 res2: e1.E1.type = e1.E1$@17a8434 scala> e1.e2.E2 res3: e1.e2.E2.type = e1.e2.E2$@1278d2b scala> new e1.e3.e4.E3 res4: e1.e3.e4.E3 = e1.e3.e4.E3@157bcad
Instrukcje pakietu można zagnieżdżać.
Plik Packages6.scala: package f1 { object F1 package f2.f3 { object F2 } package f2.f3 { class F3 } package f4 { class F4 } }
Plik Packages6.scala definiuje obiekty: f1.F1 i f1.f2.f3.F2 oraz klasy: f1.f2.f3.F3 i f1.f4.F4.
scala> f1.F1 res5: f1.F1.type = f1.F1$@14711e2 scala> f1.f2.f3.F2 res6: f1.f2.f3.F2.type = f1.f2.f3.F2$@bada5a scala> new f1.f2.f3.F3 res7: f1.f2.f3.F3 = f1.f2.f3.F3@18be6e8 scala> new f1.f4.F4 res8: f1.f4.F4 = f1.f4.F4@13194df
![]() | Specyfikacja języka Scala opisuje klauzule i instrukcje pakietu punktach 9.1 i 9.2. |
Plik Packages1.scala:
package a
object A

