在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"],]
答案 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"]