Curso de Raku / Avanzado / Módulos / Fundamentos de módulos

Etiquetas de exportación

Marcar una subrutina con is export la coloca en el grupo de exportación predeterminado del módulo — los nombres que un simple use incorpora. Al darle a is export una etiqueta, puedes organizar las exportaciones en grupos con nombre y dejar que cada programa elija el conjunto que desea.

Una etiqueta se escribe entre paréntesis después de is export:

unit module Greeting;

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

hello no tiene etiqueta, por lo que pertenece al grupo predeterminado; goodbye está etiquetada con :partings.

Un simple use importa solo el grupo predeterminado:

use Greeting;      # hello is available; goodbye is not

Nombrar una etiqueta importa ese grupo en su lugar — y, quizás sorprendentemente, no el predeterminado también:

use Greeting :partings; # goodbye is available; hello is not

Pedir :partings te da exactamente ese grupo. Para incorporar todo lo que un módulo exporta, usa la etiqueta incorporada :ALL:

use Greeting :ALL; # both hello and goodbye

Vale la pena conocer dos etiquetas especiales. :ALL es soportada por todos los módulos e importa todas sus exportaciones. :MANDATORY es una que puedes colocar en una rutina que debería importarse sin importar qué etiqueta elija el llamador.

Cada etiqueta es en realidad un paquete dentro del paquete EXPORT del módulo — Greeting::EXPORT::partings, por ejemplo — que es exactamente lo que lista la introspección de módulos. Las etiquetas permiten que un módulo grande mantenga su superficie predeterminada pequeña mientras sigue ofreciendo características adicionales bajo demanda.

Práctica

Resuelve 1 cuestionario sobre el contenido de este tema.

Quiz — use vs need   |   Quiz — Etiquetas de exportación


💪 O ve directamente a los ejercicios de esta sección.