Raku kurss / Padziļināti / Moduļi
Moduļu introspekcija
Moduļa nosaukums ievieš pakotni — nosaukumtelpu, kas satur
tajā definētos nosaukumus. Iepriekš, sadaļā par konteineriem, jūs
iepazināties ar WHO, kas atgriež pakotnes
Stash (simbolu tabulu). Moduļu introspekcija to izmanto
praksē.
Turpmākajos piemēros tiek izmantots modulis Greeting,
kas tika izveidots iepriekšējās tēmās — eksportēta apakšprogramma un
koplietota our mainīgais:
unit module Greeting;
our $version = '1.0';
sub hello($name) is export {
return "Hello, $name!";
}Moduļa pakotne tiek pierakstīta ar :: beigās.
Pievienojot .keys, tiek uzskaitīti tajā esošie
nosaukumi:
use Greeting;
say Greeting::.keys.sort; # ($version EXPORT)Modulis Greeting no iepriekšējām tēmām definē
our mainīgo $version, tāpēc tā pakotnē ir šis
nosaukums — ar sigilu iekļautu. Blakus tam atrodas EXPORT,
kas var šķist pārsteidzoši. Tā ir pakotne, ko Raku automātiski izveido,
lai glabātu visu, ko modulis atzīmē ar is export, piemēram,
apakšprogrammu hello. Tāpēc eksportēts nosaukums
neparādās tieši pakotnē; tas atrodas šajā EXPORT
apakšpakotnē. (Atslēgas tiek atgrieztas nefiksētā secībā, tāpēc piemērā
tās tiek sakārtotas, lai iegūtu stabilu rezultātu.)
Jūs varat arī meklēt nosaukumu pakotnē, izmantojot to kā atslēgu. Tas
sasniedz to pašu vērtību kā kvalificētais
$Greeting::version:
use Greeting;
say Greeting::{'$version'}; # 1.0Moduļa eksportēto elementu uzskaitīšana
Iepriekš redzētā pakotne EXPORT ir vieta, kur faktiski
atrodas eksportētie nosaukumi, tāpēc tos var uzskaitīt, ieskatoties
vienu līmeni dziļāk. Eksporti bez birkas nonāk grupā
DEFAULT (skatiet Eksporta birkas), un
tās .keys ir eksportētās rutīnas:
use Greeting;
say Greeting::EXPORT::DEFAULT::.keys.sort; # (&hello)Katra atslēga ir eksportēts nosaukums ar tā sigilu — šeit vienīgā
apakšprogramma &hello, parādīta ar &,
kas apzīmē rutīnu. Šādi jūs varat uzzināt, ko modulis piedāvā saviem
lietotājiem, nelasot tā pirmkodu: pajautājiet tā
EXPORT::DEFAULT pakotnei, ko tā satur.
Pakotnes introspekcija šādā veidā ir noderīga, ja vēlaties uzzināt, ko modulis piedāvā, vai dinamiski piekļūt tā nosaukumiem, nevis katru no tiem ierakstīt pirmkodā.
Prakse
Jūs gaida 1 viktorīna par šī temata saturu.
Vingrinājumi
Šajā sadaļā ir 2 vingrinājumi. Pirms ķerieties pie vingrinājumiem, izlasiet visus šīs sadaļas tematus.