Курс языка программирования Raku / Продвинутый уровень / Модули / Пакеты и пространства имён / Exercises / Вложенное имя
Решение: Вложенное имя
Вот возможное решение задачи.
Код
module Outer {
module Inner {
our $base = 10;
our sub doubled { $base * 2 }
}
}
say $Outer::Inner::base;
say Outer::Inner::doubled();🦋 Исходный код можно найти в файле nested-name.raku.
Вывод
10
20Комментарии
Вложение одного пространства имён в другое строит более длинный путь
::. И переменная, и подпрограмма находятся на двух уровнях вложенности, вOuter::Inner.Полное имя
$Outer::Inner::baseобращается к переменной, аOuter::Inner::doubled()обращается к подпрограмме через те же два уровня. Имя подпрограммы не несёт сигила, поэтому, в отличие от переменной, перед ним нет$.Оба члена объявлены с
our, что делает их видимыми за пределами их модуля. Объявление сmyсохранило бы их приватными дляInner.