Raku kurss / Padziļināti / Konteineri / Konteineru introspekcija
WHO un HOW
Vēl divi introspekcijas rīki papildina kopu: HOW un
WHO.
HOW
Katrai vērtībai Raku ir metaobjekts — objekts, kas zina, kā
šīs vērtības tips darbojas. HOW (saīsinājums no Higher
Order Workings) atgriež šo metaobjektu:
my $x = 42;
say $x.HOW.^name; # Perl6::Metamodel::ClassHOWJūs esat izmantojuši metaobjektu visu laiku, iespējams, to nepamanot.
.^ izsaukumā .^name ir metodes izsaukums, kas
tiek maršrutēts caur HOW. Šīs divas rindas ir
ekvivalentas:
my $x = 42;
say $x.^name; # Int
say $x.HOW.name($x); # IntTātad $x.^name ir tikai īsāks veids, kā uzrakstīt
$x.HOW.name($x). Ievērojiet, ka objekts tiek padots vēlreiz
kā arguments: metaobjekts ir kopīgs visām tipa vērtībām, tāpēc
metametodei tiek norādīts, par kuru objektu tā tiek jautāta.
.^ forma to dara automātiski. (Metodes name
gadījumā arguments tiek ignorēts, bet tā padošana ir pareizā, vispārīgā
forma — dažas metametodes to izmanto.)
Tas pats attiecas uz citām metametodēm, kuras jūs varat sastapt,
piemēram, .^methods, kas uzskaita metodes, uz kurām vērtība
reaģē.
WHO
WHO atgriež pakotni, kurai nosaukums pieder —
simbolu tabulu, kas definēta šajā vārdtelpā:
say Int.WHO.^name; # StashStash (simbolu tabulas heš) kļūst noderīgs, kad
strādājat ar moduļiem, kur tas ļauj atrast moduļa definētos nosaukumus.
Mēs pie tā atgriezīsimies sadaļā par moduļiem;
pagaidām pietiek zināt, ka WHO pastāv un ko tas apzīmē.
Kursa navigācija
← VAR
izmantošana | Aprakstīt
mainīgo →
💪 Vai arī dodieties tieši uz šīs sadaļas
vingrinājumiem.