En el siguiente bucle for simple, creamos una matriz (@a) incrementando una variable sin tipo ($ n):
my @a = do for 1..3 {
state $n;
$n.^name, $n++;
}
say @a;
El resultado es "tipo de" esperado:
[(Any 0) (Int 1) (Int 2)]
Y digo "tipo de" porque he esperado como el primer valor de $ n el valor "indefinido" (Cualquiera).
Es como, después de que se produce el primer valor (Cualquiera) y a medida que incrementamos los $ n (después del primer incremento de $ n tenemos un lanzamiento a un Int) también hay algún evento de deformación de tiempo en la asignación y obtenemos también El primer valor a cambiar. Entonces terminamos teniendo el primer valor como 0 (cero).
¿Alguien puede explicar el mecanismo exacto de este comportamiento?