Curso de Raku / Avanzado / Contenedores / Variables especiales y dinámicas
Variables dinámicas
Una variable dinámica tiene el twigil *. A
diferencia de una variable léxica, que solo es visible en el bloque
donde se declara, una variable dinámica se encuentra buscando
hacia afuera a través de la pila de llamadas — a través
de quien llamó al código actual, sin importar dónde esté definido ese
código.
my $*greeting = 'Hello';
sub greet {
say $*greeting;
}
greet(); # HelloLa subrutina greet no declara $*greeting y
no la recibe como argumento, pero puede verla, porque la variable es
dinámica y greet fue llamada desde un lugar donde está en
ámbito.
Este ejemplo funcionaría con una simple variable escalar global
$greeting, pero la naturaleza de las variables dinámicas se
verá en el siguiente ejemplo.
Como la búsqueda sigue la pila de llamadas, una declaración más cercana anula a una más lejana durante la duración de su bloque:
my $*level = 'outer';
sub show {
say $*level;
}
show(); # outer
{
my $*level = 'inner';
show(); # inner
}La misma show imprime outer la primera vez
e inner cuando se llama desde dentro del bloque que
redeclaró $*level. Esto es el ámbito dinámico, y
así es como funcionan las variables integradas de Raku
$*OUT, $*IN y $*ERR — puedes
redirigir temporalmente la salida redeclarando $*OUT en un
bloque, y cada rutina que llames dentro de él ve el nuevo valor. Las
variables dinámicas son ideales para contexto que debe fluir hacia el
código llamado sin pasarse como argumento explícito.
Práctica
Resuelve 1 cuestionario sobre el contenido de este tema.
Navegación del curso
← Quiz — Twigils | Quiz — Variables dinámicas →
💪 O ve directamente a los ejercicios de esta
sección.