Raku kurss / Padziļināti / Izpildes plūsma

gather un take

Pāris gather un take ir elastīgs veids, kā uzbūvēt sarakstu. Kādu kodu ietinat blokā gather, un ikreiz, kad šis kods izsauc take, vērtība tiek pievienota sarakstam, ko gather izveido.

my @result = gather {
    take 1;
    take 2;
    take 3;
};

say @result; # [1 2 3]

Trīs take izsaukumi dod trīs vērtības, un gather tās savāc sarakstā, kas saglabāts @result.

Šī pāra īstais spēks parādās, kad take izsaukumi ir izkaisīti pa parastu vadības plūsmu, piemēram, ciklu ar nosacījumu. Sarakstā tad ir tikai tās vērtības, ko izvēlējāties paņemt:

my @evens = gather for 1..10 {
    take $_ if $_ %% 2;
};

say @evens; # [2 4 6 8 10]

Šeit cikls iet pāri skaitļiem no 1 līdz 10, taču tiek paņemti tikai pāra skaitļi, tāpēc @evens beigās satur 2, 4, 6, 8, 10. (Operators %% pārbauda, vai skaitlis dalās bez atlikuma.)

Tieši šī nošķiršana padara gather/take tik ērtu: apkārtējais kods izlemj, kad radīt vērtību, un gather klusi savāc visu, kas paņemts.

Prakse

Jūs gaida 1 viktorīna par šī temata saturu.

Vingrinājumi

Šajā sadaļā ir 3 vingrinājumi. Pirms ķerieties pie vingrinājumiem, izlasiet visus šīs sadaļas tematus.

  1. Atkārtot katru skaitli
  2. Kvadrāti
  3. Vākt līdz pilnam

Kursa navigācija

Risinājums: Salīdzināt pēc tipa   |   Atkārtot katru skaitli