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.

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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.