我是个新手,正试图理解借贷原则。
下面的代码:
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
的值是否也应该改变?
2条答案
按热度按时间ogq8wdun1#
行:
number_list
变量。它创建一个新的变量,并以相同的名称命名它,遮蔽原始名称。简单地说,这意味着现在存在两个
number_list
变量,但第一个变量不再可访问,因为第二个变量已经接管了名称,而largest_nbr
变量引用了第一个变量。请注意,这里所做的尝试是不可能的,因为当你借用数组的一部分时,你不能修改数组。我猜这就是为什么你要在数组中添加一个
let
,因为如果你只写number_list = vec![102, 34, 6000, 89, 54, 2, 43, 8]
,而不写let
,你会得到一个错误,告诉你当它在largest_nbr
中被借用时,你不能修改它。请参阅:
第一次
0vvn1miw2#
你不是在改变
number_list
的值,你是在遮蔽它。即使你改变了number_list
,largest_number
也不会改变(刚刚删除)。为什么?因为Vec
基本上只是一个指针,长度和容量,并且未连接到缓冲区。只有数组(而不是切片!)是真实的的缓冲区。那么你如何 * 改变 * 你的Vec
呢?无论如何!你不能改变一个变量,而它仍然是作为不可变的被借用的。你不需要这样做,所以不要尝试。