12.2. Obiekt pakietowy
Scala umożliwia definiowanie tak zwanego obiektu pakietowego. Definicja takiego obiektu wygląda jak definicja zwykłego obiektu o nazwie takiej, jak nazwa pakietu, ale poprzedzona jest słowem kluczowym package. Składowe takiego obiektu zostają dodane do pakietu. W pliku PackageObject1.scala znajduje się definicja obiektu Hi oraz metody talk, znajdujących się w pakiecie greetings1.hello. Definicja metody talk znajduje się wewnątrz definicji obiektu pakietowego hello.
Plik PackageObject1.scala: package greetings1 { package hello { object Hi { def speak = println("Hi!") } } package object hello { def talk = println("Hello!!") } }
Metoda talk jest składnikiem pakietu greetings1.hello.
scala> greetings1.hello.talk Hello!! scala> greetings1.hello.Hi.speak Hi!
Obiekt pakietowy hello jest zdefiniowany w zasięgu instrukcji package greetings1, ale poza zasięgiem instrukcji package hello. Gdyby był zdefiniowany wewnątrz tej instrukcji, resultat byłby inny. W pliku PackageObject2.scala obiekt pakietowy jest zdefiniowany w zasięgu instrukcji package hello.
Plik PackageObject2.scala: package greetings2 { package hello { object Hi { def speak = println("Hi!") } package object hello { def talk = println("Hello!!") } } }
Powyższa definicja skutkuje utworzeniem dodatkowego pakietu o nazwie hello, wewnątrz pakietu greetings2.hello. Metoda talk zostaje zatem umieszczona nie w pakiecie greetings2.hello, ale w pakiecie greetings2.hello.hello.
scala> greetings2.hello.talk
<console>:11: error: object talk is not a member of package greetings2.hello
greetings2.hello.talk
^
scala> greetings2.hello.Hi.speak
Hi!
scala> greetings2.hello.hello.talk
Hello!!
![]() | Specyfikacja języka Scala opisuje obiekty pakietowe w punkcie 9.3. |
Plik PackageObject1.scala:
package greetings1 {
package hello {
object Hi {
def speak = println("Hi!")
}
}
package object hello {
def talk = println("Hello!!")
}
}

