9

考虑

.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 })

投掷

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。

4

2 回答 2

7

它将 thePair作为 a Capture,从而将 thePair变成一个命名参数:

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

在您的示例中,它不会传递任何位置参数,从而导致观察到的执行错误。

jnthn++ 指出这一点。

于 2020-04-19T20:46:33.113 回答
0

顺便说一句 - 我想知道为什么 |c 而不是 \c ...来自文档...

在签名中,可以通过在无符号参数前加上竖线 | 来创建捕获。这会将参数列表的其余部分打包到该参数中。

于 2020-04-23T20:00:54.273 回答