Self-tipovi su način da deklarišemo da trejt mora biti umiksan u drugi trejt, iako ga ne nasljeđuje direktno. Ovo omogućuje da članovi zavisnog trejta budu dostupni bez importovanja.
Self-tip je način da se suzi tip this ili drugi identifikator koji je alijas za this.
Sintaksa izgleda kao obična funkcija ali znači nešto sasvim drugačije.
Da bi koristili self-tip u trejtu, napišite identifikator, tip drugog trejta za umiksavanje, i => (tj. someIdentifier: SomeOtherTrait =>).
trait User {
def username: String
}
trait Tweeter {
this: User => // reassign this
def tweet(tweetText: String) = println(s"$username: $tweetText")
}
class VerifiedTweeter(val username_ : String) extends Tweeter with User { // We mixin User because Tweeter required it
def username = s"real $username_"
}
val realBeyoncé = new VerifiedTweeter("Beyoncé")
realBeyoncé.tweet("Just spilled my glass of lemonade") // prints "real Beyoncé: Just spilled my glass of lemonade"
Pošto smo rekli this: User => u trait Tweeter, sada je varijabla username u domenu korištenja tweet metode.
Ovo znači da pošto VerifiedTweeter nasljeđuje Tweeter, također mora umiksati i Usera (koristeći with User).
Contributors to this page:
Contents
- Uvod
- Osnove
- Sjedinjeni tipovi
- Klase
- Trejtovi
- Tuples
- Kompozicija mixin klasa
- Funkcije višeg reda
- Ugniježdene metode
- Curry-jevanje
- Case klase
- Podudaranje uzoraka (pattern matching)
- Singlton objekti
- Regularni izrazi
- Ekstraktor objekti
- For komprehensije
- Generičke klase
- Varijanse
- Gornja granica tipa
- Donja granica tipa
- Unutarnje klase
- Apstraktni tipovi
- Složeni tipovi
- Self-tipovi
- Implicitni parametri
- Implicitne konverzije
- Polimorfne metode
- Lokalno zaključivanje tipova (type inference)
- Operatori
- By-name parametri
- Anotacije
- Podrazumijevane vrijednosti parametara
- Imenovani parametri
- Packages and Imports
- Package Objects