Raku kurss / Padziļināti / Operatori / Īpašības un pragmas 🆕

Īpašības rakstīšana

Īpašības ir parastas multi-apakšprogrammas ar īpašu nosaukumu, tāpēc jūs varat rakstīt savas. Lai pievienotu īpašību, kas rakstīta is kautkas, definējiet multi sub trait_mod:<is>, kura parametri norāda, kam tā piemērojama, un nosauc īpašību:

Šis ir viens no Raku sarežģītākajiem stūriem, tāpēc neuztraucieties, ja tas šķiet sarežģīts. Jūs varat lieliski izmantot iebūvētās īpašības, nezinot, kā tās veidotas, un reti kad būs nepieciešamība rakstīt savu — uztveriet šo lapu kā ieskatu iekšējā uzbūvē.

my @traced;

multi sub trait_mod:<is>(Routine:D $r, :$traced!) {
    @traced.push($r.name);
}

sub foo() is traced { }
sub bar() is traced { }

say @traced; # [foo bar]

Izlasiet signatūru: pirmais parametrs, Routine:D $r, ir objekts, kuram īpašība ir pievienota — šeit apakšprogramma. :D ir tipa smailijs, kas pieprasa definētu vērtību — reālu apakšprogrammas objektu, nevis tukšu, nedefinētu Routine tipu pašu par sevi. (Tā partneri ir :U, kas pieprasa nedefinētu tipa objektu, un :_, kas pieņem abus.) Nosauktais parametrs :$traced! ir pašas īpašības nosaukums; tā klātbūtne ir tas, kas liek is traced izsaukt šo apakšprogrammu. Tā kā īpašības tiek izpildītas kompilēšanas laikā, gan foo, gan bar tiek reģistrētas to deklarēšanas brīdī, tāpēc @traced jau satur tos, kad programma sāk darboties — jūs pat varētu pārcelt say @traced rindu virs abām sub definīcijām, un tā joprojām izdrukātu [foo bar].

Šī mazā īpašība tikai reģistrē nosaukumus, bet tas pats mehānisms var darīt daudz vairāk: ietvert apakšprogrammu, lai pievienotu žurnalēšanu, validēt atribūtu vai pievienot metadatus. Rakstot pirmo parametru kā Attribute vai Variable nevis Routine, īpašību var piemērot atribūtiem vai mainīgajiem. Īpašības ir veids, kā Raku uztur savu deklarēšanas sintaksi atvērtu — is rw un jūsu pašu is traced ir veidoti vienādi.

Kursa navigācija

Viktorīna — Īpašības   |   Pragmas


💪 Vai arī dodieties tieši uz šīs sadaļas vingrinājumiem.