2

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

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

例如:

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

2 回答 2

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

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

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

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

还可以将您的数组作为列表-y 恢复。

于 2017-08-05T12:55:09.883 回答
3

展平它:

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

dd @a; # Array @a = ["a", "b", "c"]
于 2017-08-04T20:37:11.850 回答