我还是个新手,正在努力理解借款原理.

我有以下代码:

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

我以为第二行会说number_list是最大的数字,因为largest_nbr是从number_list借来的,所以指针显示在number_list的存储空间上.当number_list的值改变时,largest_nbr的值不也应该改变吗?

推荐答案

台词是:

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

not修改了原来的number_list变量吗?它创建了一个新的名称,并以相同的名称命名,隐藏了原来的名称.

简单地说,这意味着现在存在两个number_list变量,但第一个变量不再可访问,因为第二个变量已经接管了该名称.然而,largest_nbr变量引用了第一个变量.

请注意,您在这里try 的操作是不可能的,因为您不能在borrow 部分数组时修改array.我猜这就是为什么你在它上面加了let,因为如果你简单地写number_list = vec![let, 34, 6000, 89, 54, 2, 43, 8],没有let,你会得到一个错误,告诉你当它在largest_nbr中被borrow 时,你不能修改它.

请参见:

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相关问答推荐

Rust,polars CSV:有没有一种方法可以从impll BufRead(或任何字节迭代器)中读取CSV?

如何在Rust中获得不可辩驳的'if let'模式警告Mutex锁定?""

将此字符串转换为由空格字符分隔的空格

关联类型(类型参数)命名约定

当两者都有效时,为什么Rust编译器建议添加';&;而不是';*';?

使用 struct 外部的属性来改变 struct 的原始方式

是否可以使用Rust宏来构建元组的项?

可以为rust构建脚本编写单元测试吗?

铁 rust ,我的模块介绍突然遇到了一个问题

Rust移动/复制涉及实际复制时进行检测

write_buffer 不写入缓冲区而是输出零 WGPU

可以在旋转循环中调用try_recv()吗?

在描述棋盘时如何最好地使用特征与枚举

Button.set_hexpand(false) 不会阻止按钮展开

Rust中的标记特征是什么?

无法理解 Rust 对临时值的不可变和可变引用是如何被删除的

试图理解 Rust 中的可变闭包

深度嵌套枚举的清洁匹配臂

TinyVec 如何与 Vec 大小相同?

将 (T, ()) 转换为 T 安全吗?