Kurso de Raku / Progresinta / Subprogramoj / Nestitaj subrutinaj / Exercises / Fermi super la ekstera

Solvo: Fermi super la ekstera

Jen ebla solvo de la tasko.

Kodo

sub greet($name) {
    sub message {
        "Hello, $name!";
    }

    say message;
}

greet('Anna');

🦋 Vi povas trovi la fontkodon en la dosiero closure-over-outer.raku.

Eligo

Hello, Anna!

Komentoj

  1. message prenas neniujn argumentojn, tamen ĝi povas uzi $name. Nestita subprogramo fermas super la leksikaj variabloj de la subprogramo, kiu enhavas ĝin, do la ekstera $name estas en la videbla amplekso.

  2. Kiam greet('Anna') ruliĝas, $name estas 'Anna', do message redonas Hello, Anna!. Tiu kunhavigo de la enferma amplekso estas tio, kio faras nestitajn helpantojn pli ol nur kaŝitaj funkcioj.

Kursa navigado

← Fermi super la ekstera   |   Interna sumo →