Raku kurss / Padziļināti / Konteineri / Speciālie un dinamiskie mainīgie 🆕
Dinamiskie mainīgie
Dinamiskam mainīgajam ir tvigils *. Atšķirībā
no leksiska mainīgā, kas redzams tikai tajā blokā, kur deklarēts,
dinamisks mainīgais tiek atrasts, skatoties uz āru pa izsaukumu
steku — caur to, kurš izsauca pašreizējo kodu, neatkarīgi no
tā, kur šis kods definēts.
my $*greeting = 'Hello';
sub greet {
say $*greeting;
}
greet(); # HelloApakšprogramma greet $*greeting nedeklarē
un nesaņem to kā argumentu, tomēr var to redzēt, jo mainīgais ir
dinamisks un greet tika izsaukta no vietas, kur tas ir
redzams.
Šis piemērs strādātu arī ar vienkāršu globālu skalāro mainīgo
$greeting, taču dinamisko mainīgo daba parādīsies nākamajā
piemērā.
Tā kā meklēšana seko izsaukumu stekam, tuvāka deklarācija sava bloka laikā pārmāc tālāku:
my $*level = 'outer';
sub show {
say $*level;
}
show(); # outer
{
my $*level = 'inner';
show(); # inner
}Tā pati show pirmoreiz izdrukā outer un
inner tad, kad izsaukta no bloka, kurš $*level
pārdeklarējis. Tas ir dinamiskais redzamības apgabals, un tieši
tā darbojas Raku iebūvētie $*OUT, $*IN un
$*ERR — izvadi var uz laiku novirzīt, blokā pārdeklarējot
$*OUT, un katra tā iekšienē izsauktā rutīna redz jauno
vērtību. Dinamiskie mainīgie ir ideāli kontekstam, kam jāplūst uz
izsaukto kodu, netiekot padotam kā skaidrs arguments.
Prakse
Jūs gaida 1 viktorīna par šī temata saturu.
Kursa navigācija
← Viktorīna — Tvigili | Viktorīna — Dinamiskie mainīgie →
💪 Vai arī dodieties tieši uz šīs sadaļas
vingrinājumiem.