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 User
a (koristeći with User
).
Contributors to this page:
Contents
- Uvod
- Osnove
- Sjedinjeni tipovi
- Klase
- Podrazumijevane vrijednosti parametara
- Imenovani parametri
- 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
- Packages and Imports
- Package Objects