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.0

Moduļ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.

  1. Uzskaitīt simbolus
  2. Atrast simbolu

Kursa navigācija

Risinājums: Ielādēt izpildes laikā   |   Uzskaitīt simbolus