Курс по Raku / Функционално, паралелно, реактивно и уеб програмиране / Функционално програмиране / Генератори
gather и take
Блокът gather събира стойности. Навсякъде вътре в него —
включително в цикли и подпрограми, които той извиква — take
добавя стойност към списъка, който gather произвежда:
my @squares = gather {
take $_ ** 2 for 1..3;
}
say @squares; # [1 4 9]take се изпълнява по веднъж за всяко от числата
1, 2, 3 и дава 1, 4 и
9. Целият блок gather се изчислява до списъка
с всичко взето.
take може да стои под каквото и да е управление на
потока, което прави gather идеален за изграждане на списък
с условия:
my @evens = gather {
for 1..10 {
take $_ if $_ %% 2;
}
}
say @evens; # [2 4 6 8 10]Тук стойност се взема само когато if успее, така че в
списъка попадат само четните числа. Това често е по-ясно от изграждането
на списъка на ръка с push, защото логиката се чете като
обикновен цикъл, а take просто отбелязва стойностите за
запазване.
Практика
Направете 1 тест върху съдържанието на тази тема.
Навигация в курса
← Генератори | Тест — gather и take →
💪 Или преминете направо към упражненията в този
раздел.