Курс по Raku / Напреднали / Подпрограми / Вложени подпрограми / Exercises / Затваряне над външна

Решение: Затваряне над външна

Ето едно възможно решение на задачата.

Код

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

    say message;
}

greet('Anna');

🦋 Изходният код на тази програма можете да намерите във файла closure-over-outer.raku.

Изход

Hello, Anna!

Коментари

  1. message не приема аргументи, но може да използва $name. Вложена подпрограма затваря лексикалните променливи на подпрограмата, която я съдържа, така че външната $name е в обхват.

  2. Когато greet('Anna') се изпълни, $name е 'Anna', така че message връща Hello, Anna!. Това споделяне на обхващащия обхват е това, което прави вложените помощници повече от просто скрити функции.

Навигация в курса

Затваряне над външна   |   Вътрешна сума