将多个值附加到 Perl6 中的数组
Appending multiple values to an array in Perl6
我正在寻找一种将多个值附加到@array 的方法。文档指出有一个名为 .append 的方法可以完成这项工作。但是当我做这样的事情时:
my @array = <a b>;
my @values = 1,2,3;
@array.append: @values, 17;
我得到一个嵌套结果:
[a b [1 2 3] 17]
这更像是为了解释那里发生了什么:在 single argument rule 之后,它适用于此处,基本上表示传递给迭代器的任何内容(在本例中为 append
)都被视为单个参数,@values,17
正在构建一个列表(这将是 单个 参数),因为 ,
是列表构建运算符; append
依次应用于列表的每个元素,而不 展平 它:首先应用于数组 @values
,其次应用于数字。
基线是:如果你用逗号处理迭代器的东西,它会构建一个列表,把它变成一个参数,而不是把它变成两个参数然后做
(@array.append: <first argument>).append( <second argument> )
因此,如果您想将所有内容添加为单个平面列表,请按照@lizmat 在她的回答中所说的那样进行操作,或者执行循环并依次附加每个元素。
您需要滑动数组,因为 Perl 6 不会自动滑动 ("flatten"),除非它是参数中的 only 可迭代对象。
所以:
@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
除了 |@values
,您还可以 slip(@values)
或 @values.Slip
。
我正在寻找一种将多个值附加到@array 的方法。文档指出有一个名为 .append 的方法可以完成这项工作。但是当我做这样的事情时:
my @array = <a b>;
my @values = 1,2,3;
@array.append: @values, 17;
我得到一个嵌套结果:
[a b [1 2 3] 17]
这更像是为了解释那里发生了什么:在 single argument rule 之后,它适用于此处,基本上表示传递给迭代器的任何内容(在本例中为 append
)都被视为单个参数,@values,17
正在构建一个列表(这将是 单个 参数),因为 ,
是列表构建运算符; append
依次应用于列表的每个元素,而不 展平 它:首先应用于数组 @values
,其次应用于数字。
基线是:如果你用逗号处理迭代器的东西,它会构建一个列表,把它变成一个参数,而不是把它变成两个参数然后做
(@array.append: <first argument>).append( <second argument> )
因此,如果您想将所有内容添加为单个平面列表,请按照@lizmat 在她的回答中所说的那样进行操作,或者执行循环并依次附加每个元素。
您需要滑动数组,因为 Perl 6 不会自动滑动 ("flatten"),除非它是参数中的 only 可迭代对象。
所以:
@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
除了 |@values
,您还可以 slip(@values)
或 @values.Slip
。