Курс по Raku / Напреднали / Управление на потока
gather и take
Двойката gather и take е гъвкав начин за
изграждане на списък. Обвивате код в блок gather и всеки
път, когато този код извика take, стойността се добавя към
списъка, който gather произвежда.
my @result = gather {
take 1;
take 2;
take 3;
};
say @result; # [1 2 3]Трите извиквания на take допринасят три стойности, а
gather ги събира в списъка, съхранен в
@result.
Истинската сила на тази двойка се проявява, когато извикванията на
take са разпръснати из обикновен поток на управление,
например цикъл с условие. Списъкът тогава съдържа само стойностите,
които сте избрали да вземете:
my @evens = gather for 1..10 {
take $_ if $_ %% 2;
};
say @evens; # [2 4 6 8 10]Тук цикълът обхожда числата от 1 до 10, но само четните се вземат,
така че @evens накрая съдържа 2, 4, 6, 8, 10.
(Операторът %% проверява дали числото се дели без
остатък.)
Това разделение е причината gather/take да
е толкова удобно: заобикалящият код решава кога да произведе
стойност, а gather тихо събира всичко, което е взето.
Практика
Направете 1 тест върху съдържанието на тази тема.
Упражнения
Този раздел съдържа 3 упражнения. Разгледайте всички теми в раздела, преди да се захванете с практиката.