Curso de Raku / Programación funcional, concurrente, reactiva y web / Programación funcional / Funciones de orden superior
Pasar subrutinas
Para aceptar una subrutina como parámetro, decláralo con el sigilo
&. Dentro del cuerpo puedes llamarla entonces por su
nombre:
sub apply(&f, $x) {
f($x);
}
say apply(* + 3, 10); # 13El parámetro &f recibe un fragmento de código, y
f($x) lo llama. Aquí pasamos * + 3, una
expresión Whatever que significa «suma tres a lo que te den»,
así que apply(* + 3, 10) calcula 13.
Puedes pasar con la misma facilidad una subrutina con nombre,
refiriéndote a ella con el sigilo & para que se pase en
lugar de llamarse:
sub double($n) { $n * 2 }
sub apply(&f, $x) {
f($x);
}
say apply(&double, 5); # 10Así es exactamente como funcionan map y
grep: son subrutinas que reciben otra subrutina — tu bloque
— y la aplican a cada elemento. Escribir subrutinas propias que reciben
código las hace igual de flexibles.
Práctica
Resuelve 1 cuestionario sobre el contenido de este tema.
Navegación del curso
← Funciones de orden superior | Quiz — Pasar subrutinas →
💪 O ve directamente a los ejercicios de esta
sección.