Curso de Raku / Avanzado / Subrutinas / Subrutinas anidadas / Exercises / Clausura sobre lo externo
Solución: Clausura sobre lo externo
Aquí hay una posible solución para la tarea.
Código
sub greet($name) {
sub message {
"Hello, $name!";
}
say message;
}
greet('Anna');🦋 Puedes encontrar el código fuente en el archivo closure-over-outer.raku.
Salida
Hello, Anna!Comentarios
messageno toma argumentos, pero puede usar$name. Una subrutina anidada cierra sobre las variables léxicas de la subrutina que la contiene, así que el$nameexterno está en el ámbito.Cuando se ejecuta
greet('Anna'),$namees'Anna', así quemessagedevuelveHello, Anna!. Esta compartición del ámbito contenedor es lo que hace que las funciones auxiliares anidadas sean más que simples funciones ocultas.