Tour of Scala

Funciones Anidadas

Language

En scala es posible anidar definiciones de funciones. El siguiente objeto provee una función filter para extraer valores de una lista de enteros que están por debajo de un valor determinado:

object FilterTest extends App {
  def filter(xs: List[Int], threshold: Int) = {
    def process(ys: List[Int]): List[Int] =
      if (ys.isEmpty) ys
      else if (ys.head < threshold) ys.head :: process(ys.tail)
      else process(ys.tail)
    process(xs)
  }
  println(filter(List(1, 9, 2, 8, 3, 7, 4), 5))
}

Nota: la función anidada process utiliza la variable threshold definida en el ámbito externo como un parámetro de filter.

La salida del programa es:

List(1,2,3,4)