Курс 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

Коментарі

  1. Вкладення одного простору імен в інший будує довший шлях із ::. І змінна, і підпрограма живуть на два рівні вглиб, у Outer::Inner.

  2. Повне ім’я $Outer::Inner::base дістає змінну, а Outer::Inner::doubled() дістає підпрограму через ті самі два рівні. Ім’я підпрограми не несе сигіла, тож, на відміну від змінної, перед ним немає $.

  3. Обидва члени оголошено через our, — саме це й робить їх видимими за межами їхнього модуля. Оголошення через my лишило б їх приватними для Inner.

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

Вкладене ім’я   |   Розповсюдження модулів 🆕