循环中的借用
本课属于 Coddy Rust 学习旅程的“基础知识”单元。第 67 课,共 75 课。
在 Rust 中,每个值都有一个所有者。在循环中使用一个值时,Rust 需要知道你是想借用它(只是暂时查看),还是想取得所有权(消耗它)。
这一点很重要,因为如果循环取得了数据的所有权,那么循环结束后你就无法再使用这些数据。理解这一区别是正确编写 Rust 循环的关键。
例如,考虑以下数据:
let numbers = vec![1, 2, 3, 4, 5];
let mut sum = 0;方法 1:查看数据(使用 &):
for number in &numbers {
sum += number;
}
println!("I can use it here: {:?}", numbers);方法 2:取出数据(不使用 &):
for number in numbers {
sum += number;
}
// println!("Can't use {:?} anymore!", numbers);
// 这会导致错误可以这样理解:
- 使用
&就像翻看相册:你可以看到所有照片,但相册本身保持完整 - 不使用
&就像把照片从相册里取出来:你可以使用这些照片,但之后相册会变空
现在看这种风格:
for num in numbers.iter() {}与此类似:
for num in &numbers {}还有一种修改循环,需要使用 mut 声明向量:
let mut numbers = vec![1, 2, 3, 4, 5];
for num in numbers.iter_mut() {
*num *= 2;
}也可以写成这样:
for num in &mut numbers {
*num *= 2;
}亲手试试
这节课没有代码挑战。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Rust 在线编译器