Курс языка программирования 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.

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

Динамическая переменная   |   Переопределение динамической переменной