Cursus Raku / Geavanceerd / Modules / Pakketten en naamruimten
Naamruimten en our
De our-declarator is wat iets zichtbaar maakt in zijn
naamruimte. Een variabele gedeclareerd met my is lexicaal —
privé voor zijn blok — terwijl een variabele gedeclareerd met
our ook een pakketvariabele is, bereikbaar van buitenaf via
het ::-pad:
module Counter {
our $count = 0; # package variable
my $secret = 42; # lexical, not visible outside
}
say $Counter::count; # 0$Counter::count werkt omdat count
gedeclareerd is met our; $Counter::secret zou
mislukken, omdat secret lexicaal is.
Naamruimten kunnen genest worden. Een pakket binnen
een pakket bouwt een langer ::-pad op:
module Outer {
module Inner {
our $val = 42;
}
}
say $Outer::Inner::val; # 42De volledige naam $Outer::Inner::val loopt van de
buitenste naamruimte, naar de binnenste, tot aan de variabele. Dit is
precies hoe de standaardbibliotheek is georganiseerd — namen zoals
IO::Socket::INET zijn geneste naamruimten — en hoe een
module die je schrijft zijn onderdelen groepeert onder een naam op het
hoogste niveau.
Cursusnavigatie
← Quiz — Pakketten | Een our-variabele →
💪 Of ga direct naar
de oefeningen in deze sectie.