Cursus Raku / Geavanceerd / Modules / Basisbeginselen van modules

Export-tags

Het markeren van een subroutine met is export plaatst deze in de standaard exportgroep van een module — de namen die een gewone use binnenhaalt. Door is export een tag mee te geven, kun je exports in benoemde groepen sorteren en elk programma de gewenste set laten kiezen.

Een tag wordt tussen haakjes geschreven na is export:

unit module Greeting;

sub hello($name)   is export            { "Hello, $name!" }
sub goodbye($name) is export(:partings) { "Goodbye, $name!" }

hello heeft geen tag, dus het hoort bij de standaardgroep; goodbye is getagd met :partings.

Een gewone use importeert alleen de standaardgroep:

use Greeting;      # hello is beschikbaar; goodbye niet

Het noemen van een tag importeert die groep in plaats daarvan — en, misschien verrassend, niet ook de standaardgroep:

use Greeting :partings; # goodbye is beschikbaar; hello niet

Vragen om :partings geeft je precies die groep. Om alles te importeren wat een module exporteert, gebruik je de ingebouwde :ALL-tag:

use Greeting :ALL; # zowel hello als goodbye

Twee speciale tags zijn het vermelden waard. :ALL wordt door elke module ondersteund en importeert al diens exports. :MANDATORY is een tag die je op een routine kunt plaatsen die altijd geïmporteerd moet worden, ongeacht welke tag de aanroeper kiest.

Elke tag is in feite een pakket binnen het EXPORT-pakket van de module — bijvoorbeeld Greeting::EXPORT::partings — wat precies is wat module-introspectie toont. Tags laten een grotere module zijn standaardoppervlak klein houden terwijl het toch extra functies op verzoek aanbiedt.

Praktijk

Maak de 1 quiz over de inhoud van dit onderwerp.

Cursusnavigatie

Quiz — use vs need   |   Quiz — Export-tags


💪 Of ga direct naar de oefeningen in deze sectie.