Курс по Raku / Напреднали / Контейнери / Специални и динамични променливи 🆕 / Exercises / Динамична променлива

Решение: Динамична променлива

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

Код

my $*user = 'guest';

sub whoami {
    say "running as $*user";
}

whoami();

{
    my $*user = 'admin';
    whoami();
}

🦋 Можете да намерите пълния код във файла a-dynamic-variable.raku.

Резултат

running as guest
running as admin

Коментари

  1. Туигилът * прави $*user динамична. whoami никога не я приема като параметър — тя намира стойността, като гледа навън през стека на извикванията, така че първото извикване докладва стойността по подразбиране guest.

  2. Вътрешният блок предекларира $*user като admin за времетраенето на този блок. Същата whoami сега вижда admin, защото динамичното търсене следва този, който е в момента на стека. Заменянето на динамична променлива в обхват е начинът, по който предоставяте повишен контекст на всичко, извикано от него — без да променяте whoami изобщо.

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

Динамична променлива   |   Презаписване на динамична променлива