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