arrays - 如何将循环参数解构为固定大小的数组?

标签 arrays for-loop raku destructure

我试图将 for 循环中的参数放入 FIXED 大小的数组中。这就是我一直在做的事情(我想使用一个包含 3 个元素的数组 @m):

for (1..19).rotor(3, :partial) -> @m { say @m; } # works, but I cannot specify size of @m

但是,以下所有内容都给了我错误:
for (1..19).rotor(3, :partial) -> @m[0,1,2] { say @m; }
===SORRY!=== Error while compiling:
Variable '@m' is not declared
------> ).rotor(3, :partial) -> @m[0,1,2] { say ⏏@m; }

for (1..19).rotor(3 => -2) -> @m[0..2] { say @m; }
===SORRY!=== Error while compiling:
Variable '@m' is not declared
------> 1..19).rotor(3 => -2) -> @m[0..2] { say ⏏@m; }

for (1..19).rotor(3 => -2) -> @m[3] { say $_; say @m; }
===SORRY!=== Error while compiling:
Variable '@m' is not declared
------> ).rotor(3 => -2) -> @m[3] { say $_; say ⏏@m; }

那么,我应该如何指定数组@m 必须只有 3 个元素?

最佳答案

问题的标题提到了解构,但那是关于将某些东西拆开。例如,我们可以使用它提取三个元素:

for (1..19).rotor(3, :partial) -> [$a, $b, $c] {
}

然而,这实际上似乎并不是一个解构问题,因为请求不是将传递的聚合分解成它的部分,而是将它转换为不同类型的聚合。

进一步看这个问题:

I am trying to put the parameters in a for loop into array of FIXED size.



事情是,rotor不产生(可变)Array完全没有。相反,在编写时:
for (1..19).rotor(3, :partial) -> @m {
}

然后@mList .一个 List是不可变的(因此它的大小在创建时隐式地固定),所以如果意图是大小不会发生意外变化,那已经是一个证书。不幸的是,最终目标没有说明。

如果真的想把传递的不可变List成形Array ,除了将其分配到新的固定大小 Array 之外,别无他法。 :
for (1..19).rotor(3, :partial) -> @l {
    my @arr[3] = @l;
}

当然,如果:partial,这会爆炸。导致剩余元素;可以这样做:
for (1..19).rotor(3, :partial) -> @l {
    my @arr[@l.elems] = @l;
}

为了避免这种情况。但是,如果目标真的是确保在有剩余 elems 时一切顺利,那么要么是 where :
for (1..19).rotor(3, :partial) -> @m where .elems == 3 {
}

或者,不太清楚,一个一次性的解构:
for (1..19).rotor(3, :partial) -> @m [$,$,$] {
}

会做的。

关于arrays - 如何将循环参数解构为固定大小的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61096690/

相关文章:

java - 大 O 符号 O(NM) 或 (N^2)

java - 如何以编程方式在启动它的同一脚本中终止正在运行的进程?

android - 如何获取文件夹中所有图像文件的名称?

javascript - 如何拆分字符串数组,将字符串数字解析为整数,然后在 for 循环中将它们相加

python - 寻找最小差异

matlab - 是否可以避免在元胞数组上迭代时出现 "s{1} annoyance"?

arrays - 是否有与字节数组等效的Perl 6?

regex - perl6 正则表达式 : match all punctuations except . 和“

c - qsort() 性能问题

javascript - KnockoutJS 数组