Raku kurss / Pamati / Vairāk par funkcijām

Pievērsiet uzmanību atstarpēm

Funkciju izmantošana Raku valodā pārsvarā ir intuitīva un nerada problēmas, taču jums jābūt uzmanīgiem ar šādu aspektu.

Īsumā

Nepievienojiet atstarpi starp funkcijas nosaukumu un iekavām ar tās argumentiem. Bet izmantojiet atstarpi pēc for un if.

Garā versija

Apskatīsim vienkāršu funkciju:

sub f($x, $y) {
    return $x + $y;
}

Pirmkārt, ņemiet vērā, ka nav atstarpes starp funkcijas nosaukumu un atverošajām iekavām, kas satur parametrus. Dažos citos programmēšanas valodās kodēšanas stili var prasīt atstarpi tur. Raku valodā tas ir pieņemami, bet tā nav prakse, kuru vajadzētu ievērot:

sub f ($x, $y) {
    return $x + $y;
}

Izsaukuma pusē atstarpes neesamība ir svarīga. Ja jūs izsaucat funkciju un izlaidat iekavas, tad atstarpe pēc funkcijas nosaukuma ir neizbēgama:

f 5, 6;

Bet, ja jūs pievienojat iekavas, jūs nevarat ievietot atstarpi pirms tām. Šis ir pareizs izsaukums:

f(5, 6);

Un šis izsaukums ir nepareizs:

f (5, 6);

Šāds kods izraisa izņēmumu:

Too few positionals passed; expected 2 arguments but got 1
  sub f at t.raku line 1
  in block <unit> at t.raku line 5

Raku redz izsaukumu ar atstarpi f (5, 6) kā mēģinājumu nodot vienu argumentu (5, 6) funkcijai. Jūs varat viegli pārbaudīt šī argumenta tipu, ja pārrakstīsiet funkciju, lai tā pieņemtu tikai vienu argumentu:

sub f($param) {
    say $param.WHAT;
}

f (5, 6); # (List)

Tātad, izsaucot f (5, 6), mēs nododam funkcijai sarakstu. Sarakstu kā vienu vienību.

Kad atstarpe ir nepieciešama

Dažos gadījumos atstarpes rakstzīme ir nepieciešama. Tas notiek, kad jūs izmantojat iekavas ar vienu no atslēgvārdiem, piemēram, if vai for vai loop. Šāds kods ir nepareizs:

if(True != False) {
    say 'OK';
}

Kļūdas ziņojums izskaidro, kas ir nepareizi:

===SORRY!===
The word 'if' is interpreted as a 'if()' function call.  Please use
whitespace instead of parentheses.
at /Users/ash/raku-course/t.raku:1
------> if⏏(True != False) {
Unexpected block in infix position (two terms in a row)
at /Users/ash/raku-course/t.raku:1
------> if(True != False)⏏ {

Gadījumā ar if, iekavas nav nepieciešamas vispār, tāpēc problēma nevar rasties, ja jūs tās neizmantojat. Bet dažos gadījumos, piemēram, ar loop, jums tās ir nepieciešamas, un atstarpe kļūst obligāta:

loop(my $c = 0; $c != 10; $c++) { say $c }

Šajā kodā notiek tas pats: loop(...) tiek saprasts kā funkcijas izsaukums. Pievienojiet atstarpi, lai atrisinātu problēmu. Vai labāk pārrakstiet fragmentu, izmantojot for.

Secinājums

Galvenais: lai izvairītos no šādām problēmām, nepievienojiet atstarpi starp funkcijas nosaukumu un iekavām ar funkcijas argumentiem un mēģiniet izvairīties no iekavām, ja tas ir iespējams ar citiem valodas konstrukcijām, piemēram, vadības plūsmu.

Kursa navigācija

Vairāk par funkcijām   |   Vairāk par funkcijām / Tipizētie parametri


💪 Or jump directly to the exercise to this section.

Šī lapa ir automātiski tulkota ar ChatGPT 4o. Oriģinālais teksts angļu valodā.

Šīs lapas tulkojumi: EnglishDeutschEspañolItalianoLatviešuNederlandsБългарскиРусскийУкраїнська