Scala dozvoljava definisanje funkcija višeg reda.
To su funkcije koje primaju druge funkcije kao parametre, ili čiji je rezultat funkcija.
Ovo je funkcija apply
koja uzima drugu funkciju f
i vrijednost v
i primjenjuje funkciju f
na v
:
def apply(f: Int => String, v: Int) = f(v)
Napomena: metode se automatski pretvaraju u funkcije ako to kontekst zahtijeva.
Ovo je još jedan primjer:
class Decorator(left: String, right: String) {
def layout[A](x: A) = left + x.toString() + right
}
object FunTest extends App {
def apply(f: Int => String, v: Int) = f(v)
val decorator = new Decorator("[", "]")
println(apply(decorator.layout, 7))
}
Izvršavanjem se dobije izlaz:
[7]
U ovom primjeru, metoda decorator.layout
je automatski pretvorena u vrijednost tipa Int => String
koju zahtijeva metoda apply
.
Primijetite da je metoda decorator.layout
polimorfna metoda (tj. apstrahuje neke tipove u svom potpisu)
i Scala kompajler mora prvo instancirati tipove metode.
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