Курс Raku / Розширені / Модулі / Пакети та простори імен 🆕 / Вправи / Вкладене ім’я
Розв’язання: Вкладене ім’я
Ось один із можливих варіантів розв’язання задачі.
Код
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.