Курс по Raku / Напреднали / Контейнери / Специални и динамични променливи 🆕
Вградени специални променливи
Raku предефинира набор от променливи за вас. Повечето от тях са
динамични (туигилът *), така че — както видяхте
при динамичните
променливи — можете да ги четете навсякъде и дори да ги заменяте за
даден обхват. Ето тези, които ще използвате най-често.
Стандартни потоци
Входът и изходът преминават през три динамични променливи:
$*OUT (стандартен изход), $*ERR (стандартна
грешка) и $*IN (стандартен вход). say и
print пишат в $*OUT; за да изпратите текст към
стандартната грешка вместо това, извикайте метода върху
$*ERR:
$*OUT.say('normal output'); # goes to standard output
$*ERR.say('a diagnostic'); # goes to standard errorТъй като те са динамични, пренасочването на $*OUT в блок
изпраща изхода на всичко, извикано вътре в този блок, към новата
дестинация — без да променяте нищо от този код.
Програмата и нейният процес
Няколко променливи описват самата изпълняваща се програма:
say $*PROGRAM-NAME; # the path of the script being run
say $*PID; # the process id of this program
say $*CWD; # the current working directoryСтойностите им се променят при всяко изпълнение, затова тук не е показан фиксиран изход.
Команден ред и среда
Аргументите и средата пристигат в два готови контейнера:
@*ARGS— списъкът с аргументи от командния ред (същите, които подпрограматаMAINполучава)%*ENV— променливите на средата, като хеш
say @*ARGS.elems; # how many arguments were passed
say %*ENV<HOME>; # the value of the HOME environment variableТези вградени променливи ви спестяват ръчното свързване на същата
информация. И тъй като са динамични, търсени през стека на извикванията,
всяка вградена $* променлива може да бъде заменена за даден
обхват точно както $* променлива, създадена от вас.
Наред с тези динамични променливи, Raku има и вградените по време на
компилация ? — $?FILE и $?LINE —
които вече срещнахте на страницата за туигилите.
Практика
Направете 1 тест върху съдържанието на тази тема.
Навигация в курса
← Тест — Динамични променливи | Тест — Специални променливи →
💪 Или преминете направо към упражненията в този
раздел.