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.

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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.