如何将一个项目的contextualized数组分配给一个位置?

如何将一个项目的contextualized数组分配给一个位置?

问题描述:

在Rakudo Perl 6中item$可用于评估项目上下文中的表达式。请参阅https://docs.perl6.org/routine/item如何将一个项目的contextualized数组分配给一个位置?

我正在使用返回项目contextualized数组的库。什么是删除情景化的正确方法,以便将其分配给@变量?

例如:

my @a = $[<a b c>]; 
dd @a; # Outputs: Array @a = [["a", "b", "c"],] 

的Perl是Perl中,有不止一种方法来做到这一点,如

dd my @ = @$[<a b c>];  # via original array, equivalent to .list 
dd my @ = $[<a b c>][]; # via original array, using zen slicing 
dd my @ = |$[<a b c>];  # via intermediate Slip, equivalent to .Slip 
dd my @ = $[<a b c>].flat; # via intermediate flattening Seq 

最明确的解决方案可能通过@.list强制执行列表上下文,我会避免.flat调用,因为它具有略微不同的语义内涵。

就像提醒一样,请注意列表分配是复制,但如果您使用的是从标量容器中取出原始数组的其中一种方法,则还可以使用绑定。然而,在这种情况下,你甚至不会需要手动decontainerize作为

dd my @ := $[<a b c>]; 

也得到你回你的阵列的东西列表-Y。

+0

Aiui'''如果绑定,自动被剥离(即多余),即'dd my @:= [];'与'dd my @:= $ [];'得到相同的结果;'。 – raiph

压平:

my @a = $[<a b c>].flat; 

dd @a; # Array @a = ["a", "b", "c"] 
+2
+1

,当然还有前缀'@',d'哦(即'@a = @ $') – Christoph

+0

@Christoph伟大的想法。你为什么不用所有这些写出你自己的答案?我肯定会赞成它。 –