Curso de Raku / Programación funcional, concurrente, reactiva y web / Programación funcional / Funciones de orden superior
Devolver subrutinas
Una subrutina también puede devolver una subrutina. Esto te permite construir funciones nuevas sobre la marcha, a medida de los argumentos que le des:
sub adder($n) {
sub ($x) { $x + $n };
}
my &add5 = adder(5);
say add5(3); # 8adder(5) construye y devuelve una subrutina anónima que
suma 5 a su argumento. La guardamos en
&add5 y la llamamos como a cualquier otra subrutina.
Llamar a adder(10) daría un sumador distinto que suma
diez.
Fíjate en que la subrutina devuelta recuerda el valor de
$n de la llamada que la creó: add5 conserva su
5 incluso después de que adder haya terminado.
A una subrutina que captura valores del ámbito donde se creó se la llama
clausura, el tema de la
sección siguiente.
Devolver funciones es una forma compacta de producir familias de
operaciones emparentadas sin repetirte: una sola definición de
adder genera un número ilimitado de sumadores
concretos.
Práctica
Resuelve 1 cuestionario sobre el contenido de este tema.
Navegación del curso
← Quiz — Pasar subrutinas | Quiz — Funciones de orden superior →
💪 O ve directamente a los ejercicios de esta
sección.