解构对列表
Destructure a List of Pairs
考虑
.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
这是一个错误还是我遗漏了什么?
This is Rakudo Star version 2019.03.1 built on MoarVM version 2019.03
implementing Perl 6.d.
它将Pair
作为Capture
,从而将Pair
变成命名参数:
$ raku -e '(a => 42, b => 666).map: -> |c { dd c }'
\(:a(42))
\(:b(666))
在您的示例中,它不会传递任何位置参数,从而导致观察到的执行错误。
jnthn++ 指出了这一点。
顺便说一句 - 我想知道为什么 |c 而不是 \c ... 来自文档...
Inside a Signature, a Capture may be created by prefixing a sigilless
parameter with a vertical bar |. This packs the remainder of the
argument list into that parameter.
考虑
.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
这是一个错误还是我遗漏了什么?
This is Rakudo Star version 2019.03.1 built on MoarVM version 2019.03 implementing Perl 6.d.
它将Pair
作为Capture
,从而将Pair
变成命名参数:
$ raku -e '(a => 42, b => 666).map: -> |c { dd c }'
\(:a(42))
\(:b(666))
在您的示例中,它不会传递任何位置参数,从而导致观察到的执行错误。
jnthn++ 指出了这一点。
顺便说一句 - 我想知道为什么 |c 而不是 \c ... 来自文档...
Inside a Signature, a Capture may be created by prefixing a sigilless parameter with a vertical bar |. This packs the remainder of the argument list into that parameter.