Scala permite la definición de funciones de orden superior. Estas funciones son las que toman otras funciones como parámetros, o las cuales el resultado es una función. Aquí mostramos una función apply la cual toma otra función f y un valor v como parámetros y aplica la función f a v:
def apply(f: Int => String, v: Int) = f(v)
Nota: los métodos son automáticamente tomados como funciones si el contexto lo requiere.
Otro ejemplo:
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))
}
La ejecución da como valor el siguiente resultado:
[7]
En este ejemplo, el método decorator.layout es coaccionado automáticamente a un valor del tipo Int => String como es requerido por el método apply. Por favor note que el método decorator.layout es un método polimórfico (esto es, se abstrae de algunos de sus tipos) y el compilador de Scala primero tiene que instanciar correctamente el tipo del método.
Contributors to this page:
Contents
- Introducción
 - Basics
 - Tipos Unificados
 - Clases
 - Valores de parámetros por defecto
 - Parámetros nombrados
 - Traits
 - Tuples
 - Composición de clases mixin
 - Funciones de orden superior
 - Funciones Anidadas
 - Currying
 - Clases Case
 - Reconocimiento de patrones
 - Singleton Objects
 - Patrones basados en expresiones regulares
 - Objetos Extractores
 - For Comprehensions
 - Clases genéricas
 - Varianzas
 - Límite de tipado superior
 - Límite de tipado inferior
 - Clases Internas
 - Tipos Abstractos
 - Tipos Compuestos
 - Autorefrencias explicitamente tipadas
 - Parámetros implícitos
 - Implicit Conversions
 - Métodos polimórficos
 - Inferencia de tipos Local
 - Operadores
 - By-name Parameters
 - Anotaciones
 - Packages and Imports
 - Package Objects