Raku kurss / Padziļināti / Konteineri / Speciālie un dinamiskie mainīgie 🆕 / Exercises / Pārrakstīt dinamisko
Risinājums: Pārrakstīt dinamisko
Šeit ir iespējams risinājums uzdevumam.
Kods
sub log-it($msg) {
say "$*prefix: $msg";
}
sub task {
log-it('working');
}
{
my $*prefix = 'INFO';
task();
}
{
my $*prefix = 'DEBUG';
task();
}🦋 Atrodiet programmu failā override-dynamic.raku.
Izvade
INFO: working
DEBUG: workingKomentāri
taskizsauclog-it, taču$*prefixnekad nepiemin. Vērtība tomēr sasniedzlog-it, jo dinamiskā meklēšana seko izsaukumu stekam uz āru — garāmtask— līdz tam, kas tajā brīdī ir stekā.Abi bloki uzstāda dažādas vērtības, tāpēc viens un tas pats izsaukums
task()katrreiz dod citu priedēkli. Tieši tas padara dinamiskos mainīgos noderīgus: konteksts ieplūst dziļi ligzdotā kodā, netiekot izvilkts cauri katrai starprutīnai kā arguments.