如何将项目上下文数组分配给位置?

时间:2017-08-04 16:27:11

标签: perl6 rakudo

在Rakudo中,Perl 6 item$可用于评估项目上下文中的表达式。见https://docs.perl6.org/routine/item

我正在使用一个返回项目contextualized Array的库。删除上下文化的正确方法是什么,以便将其分配给@变量?

例如:

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

2 个答案:

答案 0 :(得分:5)

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调用,因为它的语义含义略有不同。

正如提醒一样,请注意列表分配是复制,但如果您使用其中一种方法只是从其标量容器中提取原始数组,您也可以使用绑定。但是,在这种情况下,您甚至不需要手动去包容为

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

也会让你把你的数组作为列表来回来。

答案 1 :(得分:3)

展平它:

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

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