Menu
CoddyTech

循环中的借用

本课属于 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);
// 这会导致错误

可以这样理解:

  1. 使用 & 就像翻看相册:你可以看到所有照片,但相册本身保持完整
  2. 不使用 & 就像把照片从相册里取出来:你可以使用这些照片,但之后相册会变空

现在看这种风格:

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;
}

亲手试试

这节课没有代码挑战。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: Rust 在线编译器