gpt4 book ai didi

rust - 为什么当借用变量发生变化时,借用变量不会改变?

转载 作者:行者123 更新时间:2023-12-05 09:26:03 25 4
gpt4 key购买 nike

我是 rust 的新手,正在尝试理解借用原则。

我有以下代码:

fn main() {
let number_list = vec![34, 50, 25, 100, 65];

let largest_nbr = &number_list[0];

println!("The largest number is {}", largest_nbr);

let number_list = vec![102, 34, 6000, 89, 54, 2, 43, 8];

println!("The largest number is {}", largest_nbr);
}

当我执行 cargo run 时,我得到了这个结果:

> The largest number is 34
> The largest number is 34

我希望第二行说 102 是最大的数字,因为 largest_nbr 是从 number_list 借来的,所以指针显示在存储中的 number_list。当 number_list 的值改变时,largest_nbr 的值不应该也改变吗?

最佳答案

行:

let number_list = vec![102, 34, 6000, 89, 54, 2, 43, 8];

修改原始number_list变量。它会创建一个新的并以相同的方式命名,以覆盖原始名称。

用更简单的术语来说,这意味着现在存在两个 number_list 变量,但第一个不再可访问,因为第二个已接管名称。然而,largest_nbr 变量引用第一个变量。

请注意,您在这里尝试的是不可能的,因为您不能在借用数组的一部分时修改数组。我想这就是为什么要向其添加 let 的原因,因为如果您只写 number_list = vec![102, 34, 6000, 89, 54, 2, 43, 8],如果没有 let,您会收到一个错误,告诉您在 largest_nbr 中借用它时您不能修改它。

参见:

fn main() {
let mut number_list = vec![34, 50, 25, 100, 65];

let largest_nbr = &number_list[0];

println!("The largest number is {}", largest_nbr);

number_list = vec![102, 34, 6000, 89, 54, 2, 43, 8];

println!("The largest number is {}", largest_nbr);
}
error[E0506]: cannot assign to `number_list` because it is borrowed
--> src/main.rs:8:5
|
4 | let largest_nbr = &number_list[0];
| ----------- borrow of `number_list` occurs here
...
8 | number_list = vec![102, 34, 6000, 89, 54, 2, 43, 8];
| ^^^^^^^^^^^ assignment to borrowed `number_list` occurs here
9 |
10 | println!("The largest number is {}", largest_nbr);
| ----------- borrow later used here

关于rust - 为什么当借用变量发生变化时,借用变量不会改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74581383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com