Tour of Scala

Funkcije višeg reda

Language

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.