2017-04-16 42 views
2

我有这个简单的例子,我要拿出一个数组的两个元素,并与这是一个数组的单个元素替代它:如何解决Perl 6签名中的sl parameter参数?

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]] 

是否有更好的方法来解决此问题?

+0

你试过'** @ ...'或'+ @ ...'? –

+2

我认为损失集装箱化实际上是一个bug,我已经报道过它,比如https://rt.perl.org/rt3/Public/Bug/Display.html?id=131162。任何修复都不会在这个月发布尽管如此,由于该错误至少自2015年以来一直存在,因此实际上可能存在一些生态系统后果。 –

回答

2

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

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

或多个替换

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