Cursus Raku / Geavanceerd / Subroutines / Geneste subroutines / Exercises / Afsluiten over de buitenste

Oplossing: Afsluiten over de buitenste

Hier is een mogelijke oplossing voor de opgave.

Code

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

    say message;
}

greet('Anna');

🦋 Je kunt de broncode vinden in het bestand closure-over-outer.raku.

Uitvoer

Hello, Anna!

Opmerkingen

  1. message neemt geen argumenten aan, maar kan toch $name gebruiken. Een geneste subroutine sluit over de lexicale variabelen van de subroutine die haar bevat, dus de buitenste $name is binnen bereik.

  2. Wanneer greet('Anna') wordt uitgevoerd, is $name gelijk aan 'Anna', dus message retourneert Hello, Anna!. Dit delen van het omsluitende bereik is wat geneste hulpfuncties meer maakt dan alleen verborgen functies.

Cursusnavigatie

Afsluiten over de buitenste   |   Een innerlijke som