Уничтожить список пар - PullRequest
       55

Уничтожить список пар

8 голосов
/ 19 апреля 2020

Рассмотрим

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

, который работает как ожидалось. Тем не менее,

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

throws

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

Это ошибка или я что-то упустил?

Это версия Rakudo Star 2019.03.1, построенная на MoarVM версия 2019.03, реализующая Perl 6.d.

Ответы [ 2 ]

5 голосов
/ 19 апреля 2020

Он принимает Pair как Capture, таким образом превращая Pair в именованный аргумент:

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

В вашем примере он не передает никаких позиционных аргументов, таким образом вызывая наблюдаемую ошибку выполнения.

jnthn ++ за указание на это.

0 голосов
/ 23 апреля 2020

кстати - мне было интересно, почему | c, а не \ c ... из do c ...

Внутри подписи Capture может быть создан префикс параметра без сигилла с вертикальной чертой |. Это упакует остаток списка аргументов в этот параметр.

...