Raku kurss / Padziļināti / Apakšprogrammas

Paraksti

Pamatu dalas sadala par apaksprogrammu definicijam ar pozicionaliem un nosauktajiem parametriem un noklusejuma vertibam. Parametru sarakstu sauc par signaturu. Saja sadala ir aplukotas vel divas lietas, ko signatura var darit: atzime parametru ka neobligatu un savac jebkuru papildu argumentu skaitu.

Neobligatie parametri

Parametrs, kam seko jautajuma zime, ir neobligats: izsaucejs var to izlaist. Kad tas ir izlaists, parametrs ir nedefinets, tapec var nodrosinat rezerves vertibu ar definets-vai operatoru //:

sub greet($name, $greeting?) {
    my $g = $greeting // 'Hello';
    say "$g, $name!";
}

greet('Anna');           # Hello, Anna!
greet('Anna', 'Hi');     # Hi, Anna!

Kad greet tiek izsaukts ar vienu argumentu, $greeting ir nedefinets, tapec // izmanto rezerves vertibu 'Hello'.

Uzsucosie parametri

Parametrs, kas atzimets ar *, ir uzsucoss (slurpy): tas savac visus atlikusos argumentus. Uzsucoss masivs, kas rakstits ka *@, savac jebkuru skaitu pozicionalo argumentu masiva:

sub count-them(*@items) {
    say @items.elems;
}

count-them(1, 2, 3, 4); # 4
count-them('a', 'b');   # 2

Parastos parametrus var kombinat ar uzsucoso parametru. Vispirms tiek aizpilditi fiksatie parametri, un viss, kas paliek parri, nonak uzsucosaja masiva:

sub titles($name, *@titles) {
    say "$name has {@titles.elems} title(s)";
}

titles('Anna', 'Dr', 'Prof'); # Anna has 2 title(s)

Tada pasa veida uzsucoss hess, kas rakstits ka *%, savac visus papildu nosauktos argumentus hesa:

sub register($name, *%options) {
    say "$name: {%options.elems} option(s)";
    say "role is %options<role>";
}

register('Anna', role => 'admin', active => True);

Abi nosauktie argumenti nonaks ka %options atslegas, tapec programma izvada:

Anna: 2 option(s)
role is admin

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. Summēt visus argumentus
  2. Neobligāta pakāpe
  3. Slurpy nosauktie argumenti

Kursa navigācija

Apakšprogrammas   |   Summēt visus argumentus