Scala Language
Tipi di auto
Ricerca…
Sintassi
- trait Type {selfId => / altri membri possono fare riferimento a
selfId
nel caso in cuithis
significhi qualcosa /} - trait Type {selfId: OtherType => / * altri membri possono usare
selfId
e sarà di tipoOtherType
* / - tratto Tipo {selfId: OtherType1 con OtherType2 => / *
selfId
è di tipoOtherType1
eOtherType2
* /
Osservazioni
Spesso usato con il motivo a torta.
Semplice esempio di auto-tipo
I tipi di auto possono essere usati in tratti e classi per definire i vincoli sulle classi concrete con cui è mescolato. È anche possibile utilizzare un identificatore diverso per this
usando questa sintassi (utile quando l'oggetto esterno deve essere referenziato da un oggetto interno).
Supponi di voler memorizzare alcuni oggetti. Per questo, si creano interfacce per lo storage e si aggiungono valori a un contenitore:
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.
}
}
In questo modo quelli non si trovano nella stessa gerarchia di oggetti, ma PermanentStorage
non può essere implementato senza implementare anche Container
.
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow