Raku kurss / Padziļināti / Apakšprogrammas
Izsaukšana ar kolu 🆕
Izsaucot metodi vai apakšprogrammu, tās argumentus parasti liekat
iekavās: @a.grep(* > 5). Raku piedāvā otru formu — aiz
nosaukuma lieciet kolu, un viss, kas seko kolam, kļūst
par argumentu sarakstu, pavisam bez iekavām:
say (1..10).grep: * %% 2; # (2 4 6 8 10)Kols grep: dara to pašu darbu, ko darītu iekavas:
(1..10).grep: * %% 2 nozīmē tieši
(1..10).grep(* %% 2). Abas formas ir savstarpēji
aizvietojamas:
say <a b c>.join('-'); # a-b-c
say <a b c>.join: '-'; # a-b-cKola forma ir vispatīkamākā ar metodēm, kas ņem bloku vai Whatever izteiksmi, jo tā noņem vienu ligzdošanas slāni. Salīdziniet:
my @a = 3, 1, 2;
say @a.sort({ $^b <=> $^a }); # parentheses around the block
say @a.sort: { $^b <=> $^a }; # colon — no closing paren to matchAbas izdrukā (3 2 1), taču versija ar kolu lasās tīrāk,
jo īpaši tad, ja bloks ir garš.
Šis ir metožu izsaukumu radinieks tam izsaukumam bez iekavām, ko jau
lietojat ar saraksta operatoriem, piemēram, say 1, 2, 3 —
tur say ņem visu, kas seko, par saviem argumentiem.
Vienīgais likums, kas jāatceras, ir tas, ka kola forma par argumentiem
paņem atlikušo instrukcijas daļu, tāpēc tai jābūt
izsaukumu ķēdes beigās. Tieši tāpēc
('a' .. 'z')».uc».ord.grep: 60 < * < 70 darbojas:
grep ir pēdējais izsaukums, un aiz tā nav ko ķēdēt. Ja
jāturpina izsaukt vēl metodes, izmantojiet iekavu formu vai sagrupējiet
izteiksmes daļas, lai būtu skaidrs:
say (('a' .. 'z')».uc».ord.grep: 60 < * < 70)».chr # (A B C D E)Kam jāpaskatās: nekombinējiet kolu un iekavas kā
.grep:( … ). Šāds pieraksts saduras ar parakstu literāļu
sintaksi :( … ) un neparsējas. Izmantojiet vai nu
.grep( … ), vai .grep: … — vienu vai otru, ne
abus.
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.