Курс Raku / Розширені / Модулі / Пакети та простори імен 🆕

Простори імен та our

Саме декларатор our робить щось видимим у своєму просторі імен. Змінна, оголошена через my, є лексичною — приватною для свого блоку, — тоді як оголошена через our є ще й змінною пакунка, до якої можна дістатися ззовні через шлях із :::

module Counter {
    our $count = 0;  # змінна пакунка
    my  $secret = 42; # лексична, ззовні не видима
}

say $Counter::count; # 0

$Counter::count працює, бо count оголошено через our; $Counter::secret зазнав би невдачі, бо secret є лексичною.

Простори імен можуть вкладатися. Пакунок усередині пакунка будує довший шлях із :::

module Outer {
    module Inner {
        our $val = 42;
    }
}

say $Outer::Inner::val; # 42

Повне ім’я $Outer::Inner::val проходить від зовнішнього простору імен усередину внутрішнього до змінної. Саме так організовано стандартну бібліотеку — імена на кшталт IO::Socket::INET є вкладеними просторами імен — і саме так написаний вами модуль групує свої частини під одним іменем верхнього рівня.

Навігація курсом

Тест — Пакети   |   Змінна our


💪 Або перейдіть одразу до вправ цього розділу.