Sök…


Syntax

  • egenskap Type {selfId => / andra medlemmar kan hänvisa till selfId om this betyder något /}
  • drag Type {selfId: OtherType => / * andra medlemmar kan använda selfId och det kommer att vara av typen OtherType * /
  • egenskap Typ {selfId: OtherType1 med OtherType2 => / * selfId är av typen OtherType1 och OtherType2 * /

Anmärkningar

Ofta används med tårtmönstret.

Enkelt självtypsexempel

Självtyper kan användas i drag och klasser för att definiera begränsningar för de konkreta klasserna den är blandad till. Det är också möjligt att använda en annan identifierare för this hjälp av denna syntax (användbar när yttre objekt måste refereras från ett inre objekt).

Antag att du vill lagra några objekt. För det skapar du gränssnitt för lagring och lägger till värden i en behållare:

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

På detta sätt finns de inte i samma objekthierarki, men PermanentStorage kan inte implementeras utan att också implementera Container .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow