Курс Raku / Розширені / Підпрограми / Вкладені підпрограми / Вправи / Замикання над зовнішньою
Розв’язання: Замикання над зовнішньою
Ось один із можливих варіантів розв’язання задачі.
Код
sub greet($name) {
sub message {
"Hello, $name!";
}
say message;
}
greet('Anna');🦋 Вихідний код можна знайти у файлі closure-over-outer.raku.
Вивід
Hello, Anna!Коментарі
messageне приймає аргументів, а проте може користуватися$name. Вкладена підпрограма замикається на лексичні змінні тієї підпрограми, що її містить, тож зовнішня$nameперебуває в області видимості.Коли виконується
greet('Anna'),$nameдорівнює'Anna', тожmessageповертаєHello, Anna!. Саме це спільне користування обгортальною областю видимості робить вкладених помічників чимось більшим за просто приховані функції.