Raku kurss / Padziļināti / Apakšprogrammas / Ligzdotas apakšprogrammas / Exercises / Noslēgt ārējo

Risinājums: Noslēgt ārējo

Šeit ir iespējams risinājums uzdevumam.

Kods

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

    say message;
}

greet('Anna');

🦋 Atrodiet programmu failā closure-over-outer.raku.

Izvade

Hello, Anna!

Komentāri

  1. message neņem nevienu argumentu, tomēr tā var izmantot $name. Ligzdota apakšprogramma noslēdzas pār tās apakšprogrammas leksiskajiem mainīgajiem, kas to satur, tāpēc ārējais $name ir redzams.

  2. Kad izpildās greet('Anna'), $name ir 'Anna', tāpēc message atgriež Hello, Anna!. Tieši šī apņemošā redzamības apgabala kopīgošana padara ligzdotus palīgus par kaut ko vairāk nekā tikai paslēptām funkcijām.

Kursa navigācija

Noslēgt ārējo   |   Iekšējā summa