在Perl6中向数组附加多个值

时间:2018-04-18 08:16:08

标签: arrays nested append perl6 flatten

我正在寻找一种方法将多个值附加到@array。该文档指出,有一个名为.append的方法可以完成这项工作。但是当我做这样的事情时:

my @array = <a b>;
my @values = 1,2,3;
@array.append: @values, 17;

我得到一个嵌套的结果:

[a b [1 2 3] 17]

2 个答案:

答案 0 :(得分:11)

你需要滑动数组,因为Perl 6不会自动滑动(“展平”),除非在参数中只有 可迭代。

所以:

@array.append: @values;      # will slip the array as it's the only parameter
@array.append: @values,17;   # does not slip @values
@array.append: |@values, 17; # will slip the @values into @array

您可以|@valuesslip(@values)代替@values.Slip

答案 1 :(得分:2)

这更像是要解释在那里发生了什么:遵循single argument rule,这适用于此处并且基本上表示传递给迭代器的任何内容(在这种情况下为append)都会被处理作为单个参数,@values,17正在构建一个列表(这将是单个参数),因为,是列表构建运算符; append依次应用于列表的每个元素,而不会展平:首先是arran @values,第二个是数字。 基线是:如果你使用逗号处理迭代器的东西,它将构建一个列表,将其转换为单个参数,而不是使它成为两个参数并执行

(@array.append: <first argument>).append( <second argument> )

因此,如果您想将所有内容添加为单个平面列表,请在@lizmat的回答中说明,或者执行循环并依次附加每个元素。