循环,第二部分:for (Loops, part 2)

手动递增一个计数器变量有点繁琐。这种模式还非常常见!
为了让事情更简单,Rust 提供了一种更简洁的方式来遍历一个值序列:for 循环。

for 循环

for 循环是一种为迭代器 (iterator)1 中的每个元素执行代码块的方式。

通用语法如下:

for <element> in <iterator> {
    // 要执行的代码
}

范围 (Ranges)

Rust 标准库 (standard library) 提供了范围 (range) 类型,可以用来遍历一个数字序列2

例如,如果我们想对 1 到 5 之间的数字求和:

let mut sum = 0;
for i in 1..=5 {
    sum += i;
}

每次循环运行时,i 都会在执行代码块之前被赋值为范围 (range) 中的下一个值。

Rust 中有五种范围 (range):

  • 1..5:一个(半开)范围。它包含从 1 到 4 的所有数字,不包含最后一个值 5。
  • 1..=5:一个闭合范围 (inclusive range)。它包含从 1 到 5 的所有数字,包括最后一个值 5。
  • 1..:一个开放式范围 (open-ended range)。它包含从 1 到无穷大的所有数字(实际上是到该整数类型的最大值)。
  • ..5:一个从该整数类型的最小值开始、到 4 结束的范围。它不包含最后一个值 5。
  • ..=5:一个从该整数类型的最小值开始、到 5 结束的范围。它包含最后一个值 5。

你可以在 for 循环中使用前三种范围 (range),因为它们显式指定了起始点。后两种范围 (range) 用于其他场合,我们之后会介绍。

范围 (range) 的端点不一定要是整数字面量 (integer literal)——它们也可以是变量或表达式 (expression)!

例如:

let end = 5;
let mut sum = 0;

for i in 1..(end + 1) {
    sum += i;
}

进一步阅读

1

在课程的后面部分,我们会精确地定义什么算作"迭代器 (iterator)"。 现在,把它当作一个你可以遍历的值序列即可。

2

你也可以将范围 (range) 用于其他类型(例如字符和 IP 地址), 但在日常的 Rust 编程中,整数无疑是最常见的情况。

原文链接:英文原文