为什么这两个 for 循环序列不同?

zen*_*nix 5 raku

第一的:

$ raku -e "for 1...6, 7...15 { .say }"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Run Code Online (Sandbox Code Playgroud)

现在:

$ raku -e "for 1...3, 7...15 { .say }"
1
2
3
7
11
15
Run Code Online (Sandbox Code Playgroud)

我希望这个案例打印 1,2,3,7,8,... 15。

这里发生了什么事?

p6s*_*eve 3

我认为您可能需要 raku Range运算符..(两个点)而不是 raku Sequence运算符...(三个点)。

以下是使用 Range 运算符的示例:

> raku -e 'for 1..6, 7..15 { .say }'
1..6
7..15
Run Code Online (Sandbox Code Playgroud)

哦,那不好......看起来for只是迭代这两件事 1..6并将7..15它们字符串化。

我们可以使用Slip |来解决这个问题:

> raku -e 'for |(1..6), |(7..15) { .say }'
1
2
... (all the numbers)
14
15
Run Code Online (Sandbox Code Playgroud)

进而:

raku -e 'for |(1..3), |(7..15) { .say }'
1
2
3
7
8
9
10
11
12
13
14
15
Run Code Online (Sandbox Code Playgroud)

使用 Sequence 运算符,您可以制作如下内容:

>raku -e 'for 3,7...15 { .say }'
3
7
11
15
Run Code Online (Sandbox Code Playgroud)

raku 的意思是“创建一个从 3 开始的序列,然后是 7,然后是所有值,直到到达最后一个 15”……并且由于从 3 到 7 的间隔是 4,raku 将以以下步长进行计数4. 然后你从 1..3 开始。;-)

〜p6史蒂夫