循环,第二部分:for

手动递增计数器变量略显繁琐,而且这种模式极为普遍!为了简化这一过程,Rust提供了一种更简洁的方式来遍历一系列值:for循环。

for循环

for循环是一种针对迭代器1中每个元素执行代码块的方式1。

基本语法如下:

#![allow(unused)]
fn main() {
for <element> in <iterator> {
    // code to execute
}
}

区间

Rust的标准库提供了区间类型,可用于遍历一系列数字2

例如,如果我们想计算1到5的数字之和:

#![allow(unused)]
fn main() {
let mut sum = 0;
for i in 1..=5 {
    sum += i;
}
}

每次循环运行时,i都会被赋予区间的下一个值,然后执行代码块。

Rust中有五种类型的区间:

  • 1..5:半开区间。包含从1到4的所有数字。不包括最后一个值,即5。
  • 1..=5:包含结束值的区间。包含从1到5的所有数字,包括最后一个值,即5。
  • 1..:开放式区间。从1开始,理论上到整数最大值的所有数字(实际上是直到整数类型的上限)。
  • ..5:从整数类型的最小值开始,到4的所有数字。不包括最后一个值,即5。
  • ..=5:从整数类型的最小值开始,到5的所有数字。包括最后一个值,即5。

你可以使用for循环配合前三种区间,其中起始点是明确指定的。最后两种区间类型则用于其他情境,我们将在后续学习中覆盖。

区间的极端值不必是整数字面量——它们也可以是变量或表达式!

例如:

#![allow(unused)]
fn main() {
let end = 5;
let mut sum = 0;

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

参考资料

本节练习位于 exercises/02_basic_calculator/07_for

进一步阅读

关于for循环的文档

1

在课程后期,我们将给出“迭代器”的精确定义。目前,可以将其理解为一个你可以遍历的值序列。

2

区间也可以与其他类型一起使用(比如字符和IP地址),但在日常的Rust编程中,整数无疑是最常见的应用场景。