Курс по Raku / Напреднали / Подпрограми / Вложени подпрограми / Exercises / Затваряне над външна
Решение: Затваряне над външна
Ето едно възможно решение на задачата.
Код
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!. Това споделяне на обхващащия обхват е това, което прави вложените помощници повече от просто скрити функции.