【问题标题】:How can I get around a slurpy parameter in the Perl 6 signature?如何绕过 Perl 6 签名中的 slurpy 参数?
【发布时间】:2017-04-16 13:16:02
【问题描述】:

我有一个简短的例子,我想取出一个数组的两个元素并将其替换为一个数组元素:

my @digits  = <1 2 3>.map: { [ $_, $_ ] };
say @digits;  # [[1 1] [2 2] [3 3]]

@digits.splice: 0, 2, [4,4];
say @digits; # [4 4 [3 3]]

这不起作用,因为 splice 替换实际上是 slurpy *@replacement,所以它将所有内容都变平了。

我可以尝试逐项列出它,以便将其视为一个单一的东西,但这仍然是扁平的:

@digits.splice: 0, 2, $[4,4];
say @digits; 

我可以将该项目放在另一个数组中,然后得到我想要的,但这似乎工作量太大(特别是因为我想决定它是否被展平):

@digits.splice: 0, 2, [$[4,4]];
say @digits; # [[4 4] [3 3]]

有没有更好的方法来解决这个问题?

【问题讨论】:

  • 你试过**@…+@…吗?
  • 我认为容器化的丢失实际上是一个错误。我已经将其报告为rt.perl.org/rt3/Public/Bug/Display.html?id=131162。不过,任何修复都不会在本月发布,因为实际上可能存在一些生态系统影响,因为此错误至少自 2015.12 以来就已经存在。

标签: signature raku


【解决方案1】:

您可以使用([4,4],)(作为[$[4,4]] 的替代品

@digits.splice: 0, 2, ([4,4],); #or [[4,4],];

或更多替换

@digits.splice: 0, 2, [4,4], Empty; #or ,slip();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 2015-09-20
    • 2012-04-11
    相关资源
    最近更新 更多