Курс по Raku / Напреднали / Управление на потока / gather и
take / Exercises / Gather до
запълване
Решение: Gather до запълване
Ето едно възможно решение на задачата.
Код
my $sum = 0;
my @result = gather for 1..100 {
$sum += $_;
last if $sum > 10;
take $_;
}
say @result;🦋 Можете да намерите изходния код във файла gather-big.raku.
Изход
[1 2 3 4]Коментари
На цикъла е зададен диапазон от сто числа, далеч повече, отколкото ще използва. Това е нормално, защото цикълът сам се спира: веднага щом
$sumнадвиши10,lastпрекъсва изпълнението и останалите числа не се посещават.Редът вътре в блока е от значение. Първо добавяме към
$sumи проверяваме лимита преди да вземем, така че числото, което прехвърля сумата над10(тук5), не се събира. Текущата сума достига точно10след4, така че събраният списък е1, 2, 3, 4.Това ранно излизане с
forе нещо, коетоgather/takeможе да направи, аgrepне може:grepвинаги сканира целия списък, докато тук ние избираме кога да спрем.