Implicitna konverzija iz tipa S
u tip T
je definisana kao implicitna vrijednost koja ima tip S => T
(funkcija),
ili kao implicitna metoda koja može pretvoriti u očekivani tip T
.
Implicitne konverzije se primjenjuju u dvije situacije:
- Ako je izraz
e
tipaS
, iS
ne odgovara očekivanom tipuT
. - U selekciji
e.m
gdje jee
tipaT
, ako selektorm
nije član tipaT
.
U prvom slučaju, traži se konverzija c
koja je primjenjiva na e
i čiji rezultat odgovara T
.
U drugom slučaju, traži se konverzija c
koja je primjenjiva na e
i čiji rezultat sadrži član pod imenom m
.
Sljedeća operacija nad dvije liste xs i ys tipa List[Int]
je legalna:
xs <= ys
pod pretpostavkom da su implicitne metode list2ordered
i int2ordered
definisane i dostupne (in scope):
implicit def list2ordered[A](x: List[A])
(implicit elem2ordered: A => Ordered[A]): Ordered[List[A]] =
new Ordered[List[A]] { /* .. */ }
implicit def int2ordered(x: Int): Ordered[Int] =
new Ordered[Int] { /* .. */ }
Implicitno importovani objekt scala.Predef
deklariše nekoliko predefinisanih tipova (npr. Pair
) i metoda (npr. assert
) ali i nekoliko implicitnih konverzija.
Naprimjer, kada se pozivaju Javine metode koje očekuju java.lang.Integer
, možete proslijediti scala.Int
.
Možete, zato što Predef
uključuje slj. implicitnu konverziju:
import scala.language.implicitConversions
implicit def int2Integer(x: Int): Integer =
Integer.valueOf(x)
Pošto su implicitne konverzije opasne ako se koriste pogrešno, kompajler upozorava kada kompajlira definiciju implicitne konverzije.
Da biste ugasili ova upozorenja, uradite jedno od ovog:
- Importujte
scala.language.implicitConversions
u domen definicije implicitne konverzije - Upalite kompajler s
-language:implicitConversions
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