Raku kurss / Objekti, ievade/izvade un izņēmumi / Klases un objekti / Metaobjektu protokols 🆕
Metametodes
Metametodi izsauc ar .^, nevis ar
.. Parastā .method izpilda objekta metodi;
.^method izsauc metodi uz objekta
metaobjekta — tā jautā par tipu, nevis darbojas kā
tips.
Ar .^name, kas atgriež tipa nosaukumu, jau esat
sastapušies:
say 42.^name; # IntCitas metametodes izpēta tipa struktūru. .^attributes
uzskaita tā atribūtus, un .^find_method pasaka, vai metode
eksistē:
class Animal {
has $.name;
method speak { 'generic' }
}
say Animal.^attributes.elems; # 1
say so Animal.^find_method('speak'); # True
say so Animal.^find_method('fly'); # False.^mro atgriež metožu atrisināšanas secību —
tipu ķēdi, ko Raku secīgi pārmeklē, meklējot metodi. Tā ir klases
mantošanas līnija:
class A {}
class B is A {}
say B.^mro.map(*.^name); # (B A Any Mu)B manto no A, un katrs tips galu galā no
Any un Mu, tāpēc metodes izsaukums uz
B tiek meklēts tieši pa šo ceļu. Šīs metametodes pārvērš
jūsu tipu struktūru par datiem, ko izpildes laikā var izprašņāt.
Prakse
Jūs gaida 1 viktorīna par šī temata saturu.
Kursa navigācija
← Metaobjektu protokols 🆕 | Viktorīna — Metaobjektu protokols →
💪 Vai arī dodieties tieši uz
šīs sadaļas vingrinājumiem.