Raku kurss / Padziļināti / Apakšprogrammas
Anonīmas apakšprogrammas
Apakšprogrammai nav obligāti jābūt ar nosaukumu. Anonīmu apakšprogrammu raksta tāpat kā parastu, tikai bez nosaukuma, un parasti to saglabā mainīgajā, lai vēlāk varētu izsaukt.
my $double = sub ($x) {
$x * 2
};
say $double(5); # 10Mainīgais $double satur apakšprogrammu, un
$double(5) to izsauc ar argumentu 5.
Bultiņu bloki
Raku piedāvā īsāku pierakstu tam pašam — bultiņas bloku. Tas
parametrus ievada ar bultiņu ->, un tam nav vajadzīgs ne
vārds sub, ne iekavas ap parametriem:
my $double = -> $x {
$x * 2
};
say $double(5); # 10Šis ir visizplatītākais veids, kā uzrakstīt nelielu anonīmu apakšprogrammu.
Sigils &
Ja vēlaties apakšprogrammu izsaukt pēc nosaukuma, nevis caur
$ mainīgo, deklarējiet mainīgo ar sigilu
&. Tad to var izsaukt bez sigila, tieši tāpat kā
parastu apakšprogrammu:
my &triple = -> $x {
$x * 3
};
say triple(4); # 12Nodošana citai funkcijai
Anonīmu apakšprogrammu nemaz nav obligāti glabāt mainīgajā. Tā kā tā
vienkārši ir vērtība, to var nodot tieši funkcijai, kas tādu gaida, —
piemēram, map, grep vai sort:
say (1, 2, 3).map(-> $x { $x * 2 }); # (2 4 6)Bultiņas bloks šeit ir anonīmā apakšprogramma, un map to
izsauc pa vienai reizei katram elementam. Patiesībā tieši to jūs visu
laiku esat darījuši: katrs bloks { ... } un
-> $x { ... }, ko esat nodevuši map un
grep, ir maza anonīma apakšprogramma, uzrakstīta tieši tur,
kur tā vajadzīga, nevis vispirms nosaukta.
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.