Curso de Raku / Avanzado / Contenedores / Variables especiales y dinámicas / Exercises / Sobrescribir la dinámica
Solución: Sobrescribir la dinámica
Aquí tienes una posible solución a la tarea.
Código
sub log-it($msg) {
say "$*prefix: $msg";
}
sub task {
log-it('working');
}
{
my $*prefix = 'INFO';
task();
}
{
my $*prefix = 'DEBUG';
task();
}🦋 Puedes encontrar el código fuente en el archivo override-dynamic.raku.
Salida
INFO: working
DEBUG: workingComentarios
taskllama alog-itpero nunca menciona$*prefix. El valor aún llega alog-it, porque la búsqueda dinámica sigue la pila de llamadas hacia afuera — pasando portask— hasta quien esté en la pila en ese momento.Los dos bloques establecen valores diferentes, así que la misma llamada a
task()produce un prefijo diferente cada vez. Esto es lo que hace útiles a las variables dinámicas: el contexto fluye hacia código profundamente anidado sin necesidad de pasarlo a través de cada rutina intermedia como argumento.