Курс языка программирования 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 →
💪 Или перейдите сразу к упражнениям этого
раздела.