gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:25:58 24 4
gpt4 key购买 nike

我试图将 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com