Pakete sind keine Laufzeitobjekte, Objekte sind. Sie sollten Pakete verwenden, um die Hierarchie Ihres Codes und Objekte zu organisieren, wann immer Sie etwas zum Speichern von Code oder Daten benötigen (vorausgesetzt, dass Klassen und Instanzen natürlich nicht besser sind).
Um ein bisschen zu hinzuzufügen Daniels Antwort :
Aus den Scala-Spezifikationen :
%Vor%Klassen (§5.3) und Objekte (§5.4) sind beide in Form von Vorlagen definiert.
Eine Vorlage definiert die Typensignatur, das Verhalten und den Anfangszustand eines Merkmals oder einer Klasse von Objekten oder eines einzelnen Objekts.Es kann haben:
- lokale Modifikatoren ('
abstract
', 'final
', 'sealed
', 'implicit
', 'lazy
')- Zugriff geändert ('
private
' | 'protected
'),- Zugriffsqualifizierer ('
this
')Eine Objektdefinition definiert ein einzelnes Objekt einer neuen Klasse (oder: Modul ), das der Vorlage t entspricht.
Es entspricht ungefähr den folgenden drei Definitionen, die zusammengenommen werden Definieren Sie eine Klasse und erstellen Sie ein einzelnes Objekt dieser Klasse bei Bedarf:
Ein Objekt kann einen für andere Klasseninstanzen gemeinsamen Code isolieren. Eine spezifische Verwendung:
Klassen in Scala haben keine statischen Mitglieder; Ein entsprechender Effekt kann jedoch durch eine begleitende Objektdefinition erreicht werden.
Im Allgemeinen ist ein begleitendes Modul einer Klasse ein -Objekt, das denselben Namen wie die Klasse hat und im selben Bereich und in derselben Kompilierungseinheit definiert ist. Umgekehrt heißt die Klasse Companion-Klasse des Moduls.
Ein Paket ist Teil der Kompilierungseinheit .
Eine Kompilierungseinheit besteht aus einer Abfolge von Verpackungen, Importklauseln und einer Klasse und Objektdefinitionen, denen eine Paketklausel vorangestellt sein kann.
Ein Paket ist ein spezielles Objekt, das eine Menge von Mitgliedsklassen, Objekten und definiert Pakete.
Im Gegensatz zu anderen Objekten dürfen Pakete nicht als Werte verwendet werden. Es ist illegal, ein Paket mit demselben vollständig qualifizierten Namen wie ein Modul oder eine Klasse zu haben.
Es wird angenommen, dass Definitionen auf oberster Ebene außerhalb einer Verpackung in ein spezielles Dokument eingefügt werden leeres Paket. Dieses Paket kann nicht benannt werden und kann daher nicht importiert werden.Der spezielle vordefinierte Name
_root_
bezieht sich auf das äußerste Root-Paket, das enthält alle Pakete der obersten Ebene.
Also: