Zerstöre eine Liste von Paaren

8

Erwägen

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

das funktioniert wie erwartet. Jedoch,

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

wirft

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

Ist das ein Fehler oder fehlt mir etwas?

Dies ist Rakudo Star Version 2019.03.1, die auf MoarVM Version 2019.03 basiert und Perl 6.d implementiert.

Holli
quelle

Antworten:

5

Es nimmt das Pairals Capture, und verwandelt das Pairin ein benanntes Argument:

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

In Ihrem Beispiel werden dann keine Positionsargumente übergeben, wodurch der beobachtete Ausführungsfehler verursacht wird.

jnthn ++ für den Hinweis.

Elizabeth Mattijsen
quelle
3
Zwang zu a Captureist genau so, wie Destrukturierung funktioniert.
Jonathan Worthington
0

Übrigens - ich habe mich gefragt, warum | c und nicht \ c ... aus dem Dokument ...

Innerhalb einer Signatur kann ein Capture erstellt werden, indem einem sigilless-Parameter ein vertikaler Balken | vorangestellt wird. Dadurch wird der Rest der Argumentliste in diesen Parameter gepackt.

p6steve
quelle