Suche…


Syntax

  • trait Typ {selfId => / andere Mitglieder können auf selfId verweisen, falls this etwas bedeutet /}
  • trait Typ {selfId: OtherType => / * andere Mitglieder können selfId und es wird vom Typ OtherType * / sein.
  • trait Typ {selfId: OtherType1 mit OtherType2 => / * selfId ist vom Typ OtherType1 und OtherType2 * /

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