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

Komentāri

  1. task izsauc log-it, taču $*prefix nekad nepiemin. Vērtība tomēr sasniedz log-it, jo dinamiskā meklēšana seko izsaukumu stekam uz āru — garām task — līdz tam, kas tajā brīdī ir stekā.

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

Kursa navigācija

Pārrakstīt dinamisko   |   Tēmas mainīgais