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
messageneemt geen argumenten aan, maar kan toch$namegebruiken. Een geneste subroutine sluit over de lexicale variabelen van de subroutine die haar bevat, dus de buitenste$nameis binnen bereik.Wanneer
greet('Anna')wordt uitgevoerd, is$namegelijk aan'Anna', dusmessageretourneertHello, Anna!. Dit delen van het omsluitende bereik is wat geneste hulpfuncties meer maakt dan alleen verborgen functies.