Raku-Kurs / Fortgeschritten / Container / Spezielle und dynamische Variablen / Exercises / Die dynamische Variable überschreiben
Lösung: Die dynamische Variable überschreiben
Hier ist eine mögliche Lösung der Aufgabe.
Code
sub log-it($msg) {
say "$*prefix: $msg";
}
sub task {
log-it('working');
}
{
my $*prefix = 'INFO';
task();
}
{
my $*prefix = 'DEBUG';
task();
}🦋 Du findest den Quellcode in der Datei override-dynamic.raku.
Ausgabe
INFO: working
DEBUG: workingKommentare
taskruftlog-itauf, erwähnt aber nie$*prefix. Der Wert erreichtlog-ittrotzdem, weil die dynamische Auflösung dem Aufrufstapel nach außen folgt — antaskvorbei — zu demjenigen, der sich gerade auf dem Stapel befindet.Die beiden Blöcke setzen unterschiedliche Werte, sodass derselbe
task()-Aufruf jedes Mal ein anderes Präfix erzeugt. Das macht dynamische Variablen nützlich: Kontext fließt in tief verschachtelten Code, ohne durch jede Zwischenroutine als Argument durchgereicht zu werden.
Kursnavigation
← Die dynamische Variable überschreiben | Die Themenvariable →