Scala Language
Zelf typen
Zoeken…
Syntaxis
- eigenschap Type {selfId => / andere leden kunnen verwijzen naar
selfId
in het gevalthis
iets betekent /} - eigenschap Type {selfId: OtherType => / * andere leden kunnen
selfId
en het zal van het typeOtherType
* / zijn - eigenschap Type {selfId: OtherType1 met OtherType2 => / *
selfId
is van het typeOtherType1
enOtherType2
* /
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