Reestruturar uma lista de pares

8

Considerar

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

que funciona como esperado. Contudo,

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

joga

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

Isso é um bug ou estou faltando alguma coisa?

Esta é a versão Rakudo Star 2019.03.1, criada na versão MoarVM 2019.03, implementando o Perl 6.d.

Holli
fonte

Respostas:

5

É pegar o Pairas a Capture, transformando o Pairargumento em um nomeado:

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

No seu exemplo, ele não passa nenhum argumento posicional, causando o erro de execução observado.

jnthn ++ por apontar isso.

Elizabeth Mattijsen
fonte
3
A coerção para a Captureé exatamente como a desestruturação funciona.
Jonathan Worthington
0

btw - Eu queria saber por que | ce não \ c ... do doc ...

Dentro de uma Assinatura, uma Captura pode ser criada prefixando um parâmetro sem sigilo com uma barra vertical |. Isso empacota o restante da lista de argumentos nesse parâmetro.

p6steve
fonte