¿Cómo show_tied
apago cuando uso DP en Raku?
Debe convertir explícitamente Associative
s (por ejemplo, Pair
s) que se enumeran al final de una use
declaración, que no son "etiquetas", en una lista aplanada que entrelaza claves y valores. 1
La solución más directa es escribir manualmente una lista plana de literales, por ejemplo:
use Data::Printer:from<Perl5> 'show_tied', 0;
Para una solución más ordenada, consulte la sección Uso akv
continuación.
Inyectando variables
Tenga en cuenta que las use
declaraciones se evalúan en tiempo de compilación . Entonces, si desea inyectar variables en la lista, entonces debe asegurarse de que sus valores, no solo sus nombres, también se establezcan en tiempo de compilación , antes de use
evaluar la declaración. Un sin adornos my $foo = 0;
no será suficiente porque la = 0
parte sucederá en tiempo de ejecución . En su lugar, deberá utilizar una construcción adecuada en tiempo de compilación como BEGIN
:
BEGIN my $foo = 0;
use Data::Printer:from<Perl5> 'show_tied', $foo;
Utilizando kv
La kv
rutina puede generar la 'key1', value1, 'key2', value2, ...
secuencia deseada dado un hash:
use Data::Printer:from<Perl5> kv { show_tied => 0 }
o:
BEGIN my %opts = show_tied => 0;
use Data::Printer:from<Perl5> kv %opts;
Notas al pie
1 Esta respuesta se basó en la explicación de Stefan del problema que abrí en respuesta a la "Alteración de parámetros en Datos :: Impresora en Raku" SO :
La solución es bastante simple: usar Data::Printer:from<Perl5> 'show_tied', 0;
La coma gruesa =>
es un Pair
constructor en Raku, mientras que en realidad es solo una coma elegante en Perl 5. Raku considera que los Pair
argumentos se usan para importar etiquetas como :ALL
(que es equivalente a ALL => True
). Para evitar esto y pasar lo que el código de Perl 5 espera, solo enumere los valores individualmente.
En otras palabras, esta necesidad de conversión se debe a que Perl y Raku comparten la noción de etiquetas ( documento de Perl sobre "etiquetas" ; documento de Raku sobre "etiquetas" ) y (no por casualidad) usan idiomáticamente la misma sintaxis para seleccionar etiquetas ( :tagname
).
Además, usando Raku, este problema de (la necesidad de resolver) la ambigüedad entre si la sintaxis se está utilizando para especificar etiquetas o no se aplica a todos Associative
los correos electrónicos utilizados en el nivel superior de una use
declaración, no solo los escritos en el formulario :foo
sino incluso los escritos en otras formas tales como foo => bar
, { foo => bar}
, %baz
, o { %baz }
.
var
variables terribles . Parece que este paquete ni siquiera funciona en Raku. Es una pena, en Perl funciona de maravilla: (