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


💪 Или преминете направо към упражненията в този раздел.