2017-04-16 40 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();