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

Пространства имён и our

Декларатор our делает что-либо видимым в его пространстве имён. Переменная, объявленная с помощью my, является лексической — приватной для своего блока, — тогда как переменная, объявленная с помощью our, также является переменной пакета, доступной извне через путь :::

module Counter {
    our $count = 0;  # package variable
    my  $secret = 42; # lexical, not visible outside
}

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


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