Zoeken…


Syntaxis

  • eigenschap Type {selfId => / andere leden kunnen verwijzen naar selfId in het geval this iets betekent /}
  • eigenschap Type {selfId: OtherType => / * andere leden kunnen selfId en het zal van het type OtherType * / zijn
  • eigenschap Type {selfId: OtherType1 met OtherType2 => / * selfId is van het type OtherType1 en OtherType2 * /

Opmerkingen

Vaak gebruikt met het cakepatroon.

Eenvoudig zelftype voorbeeld

Zelftypen kunnen in eigenschappen en klassen worden gebruikt om beperkingen te definiëren voor de concrete klassen waaraan het is gemengd. Het is ook mogelijk een andere identificator te gebruiken voor this gebruik van deze syntax (nuttig bij buitenobject moet worden verwezen vanuit een inwendig object).

Stel dat u enkele objecten wilt opslaan. Daarvoor maakt u interfaces voor de opslag en voegt u waarden toe aan een container:

 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.
   }
 }

Op deze manier bevinden die zich niet in dezelfde objecthiërarchie, maar PermanentStorage kan niet worden geïmplementeerd zonder ook Container implementeren.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow