Kurso de Raku / Progresinta / Ujoj / Specialaj kaj dinamikaj variabloj / Exercises / Superregi la dinamikan
Solvo: Superregi la dinamikan
Jen ebla solvo de la tasko.
Kodo
sub log-it($msg) {
say "$*prefix: $msg";
}
sub task {
log-it('working');
}
{
my $*prefix = 'INFO';
task();
}
{
my $*prefix = 'DEBUG';
task();
}🦋 Vi povas trovi la fontkodon en la dosiero override-dynamic.raku.
Eligo
INFO: working
DEBUG: workingKomentoj
taskvokaslog-itsed neniam mencias$*prefix. La valoro tamen atingaslog-it, ĉar dinamika serĉado sekvas la vokan stakon eksteren — pretertask— al tiu, kiu estas sur la stako en tiu momento.La du blokoj agordas malsamajn valorojn, do la sama voko
task()produktas malsaman prefikson ĉiufoje. Jen kio faras dinamikajn variablojn utilaj: kunteksto fluas en profunde nestitan kodon sen esti pasigita tra ĉiu meza subrutino kiel argumento.