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: English • Deutsch • Español • Italiano • Latviešu • Nederlands • Български • Русский • Українська