Scala Language
Selbsttypen
Suche…
Syntax
- trait Typ {selfId => / andere Mitglieder können auf
selfId
verweisen, fallsthis
etwas bedeutet /} - trait Typ {selfId: OtherType => / * andere Mitglieder können
selfId
und es wird vom TypOtherType
* / sein. - trait Typ {selfId: OtherType1 mit OtherType2 => / *
selfId
ist vom TypOtherType1
undOtherType2
* /
Bemerkungen
Wird oft mit dem Kuchenmuster verwendet.
Einfaches Selbsttyp-Beispiel
Self-Typen können in Merkmalen und Klassen verwendet werden, um Einschränkungen für die konkreten Klassen zu definieren, mit denen sie gemischt werden. Es ist auch möglich , eine andere Kennung für die verwenden this
unter Verwendung dieser Syntax (nützlich , wenn äußere Objekt aus einem inneren Objekt verwiesen werden).
Angenommen, Sie möchten einige Objekte speichern. Dazu erstellen Sie Schnittstellen für die Speicherung und fügen einem Container Werte hinzu:
trait Container[+T] {
def add(o: T): Unit
}
trait PermanentStorage[T] {
/* Constraint on self type: it should be Container
* we can refer to that type as `identifier`, usually `this` or `self`
* or the type's name is used. */
identifier: Container[T] =>
def save(o: T): Unit = {
identifier.add(o)
//Do something to persist too.
}
}
Auf diese Weise befinden sich diese nicht in derselben Objekthierarchie, aber PermanentStorage
kann nicht implementiert werden, ohne auch Container
implementieren.
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow