如何将一个项目的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。
压平:
my @a = $[<a b c>].flat;
dd @a; # Array @a = ["a", "b", "c"]
替代方法是前缀'|'将其滑入数组(即'@a = | $ []')或后缀'[]'来取回一个decontainerized禅片(即'@a = $ [ ] []') – Christoph
,当然还有前缀'@',d'哦(即'@a = @ $') – Christoph
@Christoph伟大的想法。你为什么不用所有这些写出你自己的答案?我肯定会赞成它。 –
Aiui'''如果绑定,自动被剥离(即多余),即'dd my @:= [];'与'dd my @:= $ [];'得到相同的结果;'。 – raiph