Курс языка программирования Raku / Продвинутый уровень / Модули / Основы модулей

Теги экспорта

Пометка подпрограммы is export помещает её в группу экспорта модуля по умолчанию — это имена, которые подключает простой use. Добавив к is export тег, вы можете распределить экспорты по именованным группам и позволить каждой программе выбирать нужный набор.

Тег записывается в скобках после is export:

unit module Greeting;

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

У hello нет тега, поэтому она принадлежит группе по умолчанию; goodbye помечена тегом :partings.

Простой use импортирует только группу по умолчанию:

use Greeting;      # hello is available; goodbye is not

Указание тега импортирует эту группу вместо группы по умолчанию — и, возможно неожиданно, не включает группу по умолчанию:

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

Запрашивая :partings, вы получаете именно эту группу. Чтобы подключить всё, что модуль экспортирует, используйте встроенный тег :ALL:

use Greeting :ALL; # both hello and goodbye

Стоит знать два специальных тега. :ALL поддерживается каждым модулем и импортирует все его экспорты. :MANDATORY можно поставить на подпрограмму, которая должна импортироваться независимо от того, какой тег выберет вызывающая сторона.

Каждый тег — это на самом деле пакет внутри пакета EXPORT модуля, например Greeting::EXPORT::partings, — именно это показывает интроспекция модулей. Теги позволяют большому модулю сохранять небольшую поверхность по умолчанию, при этом предлагая дополнительные возможности по запросу.

Практика

Пройдите 1 тест по содержанию этой темы.

Навигация по курсу

Тест — use и need   |   Тест — Теги экспорта


💪 Или перейдите сразу к упражнениям этого раздела.