Cursus Raku / Geavanceerd / Containers / Speciale en dynamische variabelen / Exercises / De dynamische overschrijven
Oplossing: De dynamische overschrijven
Hier is een mogelijke oplossing voor de opgave.
Code
sub log-it($msg) {
say "$*prefix: $msg";
}
sub task {
log-it('working');
}
{
my $*prefix = 'INFO';
task();
}
{
my $*prefix = 'DEBUG';
task();
}🦋 Je kunt de broncode vinden in het bestand override-dynamic.raku.
Uitvoer
INFO: working
DEBUG: workingOpmerkingen
taskroeptlog-itaan maar noemt nooit$*prefix. De waarde bereiktlog-ittoch, omdat dynamisch opzoeken de call stack naar buiten volgt — voorbijtask— naar wie er op dat moment op de stack staat.De twee blokken stellen verschillende waarden in, dus dezelfde
task()-aanroep produceert elke keer een ander prefix. Dit is wat dynamische variabelen nuttig maakt: context stroomt naar diep geneste code zonder als argument door elke tussenliggende routine te worden geleid.