Курс по Raku / Напреднали / Контейнери / Специални и динамични променливи 🆕 / Exercises / Презаписване на динамична променлива
Решение: Презаписване на динамична променлива
Ето едно възможно решение на задачата.
Код
sub log-it($msg) {
say "$*prefix: $msg";
}
sub task {
log-it('working');
}
{
my $*prefix = 'INFO';
task();
}
{
my $*prefix = 'DEBUG';
task();
}🦋 Можете да намерите пълния код във файла override-dynamic.raku.
Резултат
INFO: working
DEBUG: workingКоментари
taskизвикваlog-it, но никога не споменава$*prefix. Стойността все пак достигаlog-it, защото динамичното търсене следва стека на извикванията навън — покрайtask— до този, който е на стека по това време.Двата блока задават различни стойности, така че същото извикване на
task()произвежда различен префикс всеки път. Това е, което прави динамичните променливи полезни: контекстът тече в дълбоко вложен код, без да се предава през всяка междинна подпрограма като аргумент.
Навигация в курса
← Презаписване на динамична променлива | Тематичната променлива →