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: working

Komentoj

  1. task vokas log-it sed neniam mencias $*prefix. La valoro tamen atingas log-it, ĉar dinamika serĉado sekvas la vokan stakon eksteren — preter task — al tiu, kiu estas sur la stako en tiu momento.

  2. 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.

Kursa navigado

Superregi la dinamikan   |   La temvariablo