Курс Raku / Розширені / Контейнери / Спеціальні та динамічні змінні 🆕 / Вправи / Динамічна змінна
Розв’язання: Динамічна змінна
Ось один із можливих варіантів розв’язання задачі.
Код
my $*user = 'guest';
sub whoami {
say "running as $*user";
}
whoami();
{
my $*user = 'admin';
whoami();
}🦋 Вихідний код можна знайти у файлі a-dynamic-variable.raku.
Вивід
running as guest
running as adminКоментарі
Твіґіл
*робить$*userдинамічною.whoamiніколи не приймає її параметром — вона знаходить значення, дивлячись назовні по стеку викликів, тож перший виклик повідомляє типовеguest.Внутрішній блок перевизначає
$*userякadminна час цього блоку. Та самаwhoamiтепер бачитьadmin, бо динамічний пошук іде за тим, хто зараз перебуває у стеку. Перекриття динамічної змінної в області видимості — це спосіб надати підвищений контекст усьому, що з неї викликається, зовсім не змінюючиwhoami.