我是 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);
}
Run Code Online (Sandbox Code Playgroud)
当我执行时cargo run我得到这个结果:
> The largest number is 34
> The largest number is 34
Run Code Online (Sandbox Code Playgroud)
我预计第二行会说102是最大的数字,因为largest_nbr借用自number_list,因此指针显示在 的存储处number_list。当 的值number_list改变时, 的值不应该largest_nbr也改变吗?
该行:
let number_list = vec![102, 34, 6000, 89, 54, 2, 43, 8];
Run Code Online (Sandbox Code Playgroud)
不修改原始number_list变量。它创建一个新名称并以相同的名称命名,从而遮盖原始名称。
简单来说,这意味着现在number_list存在两个变量,但第一个变量不再可访问,因为第二个变量已接管名称。然而,该largest_nbr变量引用第一个变量。
请注意,您在这里尝试的操作是不可能的,因为在借用数组的一部分时您无法修改该数组。let我想这就是为什么你在其中添加了 a ,因为如果你只是简单地写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);
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |