Scala Language
Självtyper
Sök…
Syntax
- egenskap Type {selfId => / andra medlemmar kan hänvisa till
selfId
omthis
betyder något /} - drag Type {selfId: OtherType => / * andra medlemmar kan använda
selfId
och det kommer att vara av typenOtherType
* / - egenskap Typ {selfId: OtherType1 med OtherType2 => / *
selfId
är av typenOtherType1
ochOtherType2
* /
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