Курс по Raku / Напреднали / Подпрограми
Анонимни подпрограми
Подпрограмата не е задължително да има име. Анонимна подпрограма се записва точно като обикновена, но без име, и обикновено се съхранява в променлива, за да можете да я извикате по-късно.
my $double = sub ($x) {
$x * 2
};
say $double(5); # 10Променливата $double съдържа подпрограмата, а
$double(5) я извиква с аргумент 5.
Стрелкови блокове
Raku предлага по-кратък запис за същото нещо — стрелковият
блок. Той използва стрелката -> за въвеждане на
параметрите и не се нуждае нито от думата sub, нито от
скоби около тях:
my $double = -> $x {
$x * 2
};
say $double(5); # 10Това е най-разпространеният начин за писане на малка анонимна подпрограма.
Сигилът &
Ако предпочитате да извиквате подпрограмата по име, вместо чрез
променлива с $, декларирайте променливата със сигила
&. Тогава можете да я извикате без сигила, точно като
обикновена подпрограма:
my &triple = -> $x {
$x * 3
};
say triple(4); # 12Предаване на друга функция
Не е задължително да съхранявате анонимна подпрограма в променлива.
Тъй като тя е просто стойност, можете да я подадете директно на функция,
която очаква такава — като map, grep или
sort:
say (1, 2, 3).map(-> $x { $x * 2 }); # (2 4 6)Стрелковият блок тук е анонимната подпрограма, а map я
извиква веднъж за всеки елемент. Всъщност точно това правехте досега:
всеки блок { ... } и -> $x { ... }, който
сте подавали на map и grep, е малка анонимна
подпрограма, записана точно там, където е необходима, вместо първо да
бъде именувана.
Практика
Направете 1 тест върху съдържанието на тази тема.
Упражнения
Този раздел съдържа 3 упражнения. Разгледайте всички теми в раздела, преди да се захванете с практиката.