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

  1. message no toma argumentos, pero puede usar $name. Una subrutina anidada cierra sobre las variables léxicas de la subrutina que la contiene, así que el $name externo está en el ámbito.

  2. Cuando se ejecuta greet('Anna'), $name es 'Anna', así que message devuelve Hello, Anna!. Esta compartición del ámbito contenedor es lo que hace que las funciones auxiliares anidadas sean más que simples funciones ocultas.

← Clausura sobre lo externo   |   Una suma interna →