Desestructurar una lista de pares

8

Considerar

.say for (1,2,2).rotor(2=>-1).map( -> ($a, $b) { $a - $b })

que funciona como se esperaba Sin embargo,

.say for (1,2,2).pairs.rotor(2=>-1).map( -> ($a, $b) { $a.value - $b.value })

tiros

Too few positionals passed to '<anon>'; expected 2 arguments but got 0 in sub-signature

¿Es esto un error o me falta algo?

Esta es la versión Rakudo Star 2019.03.1 construida en MoarVM versión 2019.03 que implementa Perl 6.d.

Holli
fuente

Respuestas:

5

Está tomando el Pairas a Capture, convirtiendo así Pairen un argumento con nombre:

$ raku -e '(a => 42, b => 666).map: -> |c { dd c }'
\(:a(42))
\(:b(666))

En su ejemplo, no pasa ningún argumento posicional, lo que provoca el error de ejecución observado.

jnthn ++ por señalar esto.

Elizabeth Mattijsen
fuente
3
La coerción a a Capturees precisamente cómo funciona la desestructuración.
Jonathan Worthington
0

por cierto, me preguntaba por qué | c y no \ c ... del documento ...

Dentro de una firma, se puede crear una captura prefijando un parámetro sin sigil con una barra vertical |. Esto empaqueta el resto de la lista de argumentos en ese parámetro.

p6steve
fuente