For loop 通过获取所有权将不可变变量转换为可变变量

For loop 通过获取所有权将不可变变量转换为可变变量,for-loop,rust,ownership,For Loop,Rust,Ownership,我从rust官方网站浏览时发现: 请注意,我们需要使v1_iter可变:在迭代器上调用下一个方法会更改迭代器用于跟踪其在序列中的位置的内部状态。换句话说,这段代码消耗或用尽了迭代器。对next的每次调用都会消耗迭代器中的一项当我们使用for循环时,我们不需要使v1_iter可变,因为该循环拥有v1_iter的所有权,并使其在幕后可变。 如果你注意到最后一行。它说for循环使可变变量在幕后不可变。如果这是可能的,那么作为一名程序员,我们是否也可以这样做呢 就像我知道它不安全,我们不应该这样做之类的

我从rust官方网站浏览时发现:

请注意,我们需要使
v1_iter
可变:在迭代器上调用下一个方法会更改迭代器用于跟踪其在序列中的位置的内部状态。换句话说,这段代码消耗或用尽了迭代器。对next的每次调用都会消耗迭代器中的一项当我们使用for循环时,我们不需要使
v1_iter
可变,因为该循环拥有
v1_iter
的所有权,并使其在幕后可变。

如果你注意到最后一行。它说for循环使可变变量在幕后不可变。如果这是可能的,那么作为一名程序员,我们是否也可以这样做呢


就像我知道它不安全,我们不应该这样做之类的,但只是想知道这是否可能。

将不可变变量重新绑定到可变变量是完全正确的,例如,以下代码可以工作:

let x = 5;
let mut x = x;
在最后一个语句之后,我们可以变异
x
变量。事实上,思想上有两个变量,第一个是移动到最新的。该功能也可以执行同样的操作:

fn f(mut x:i32){
x+=1;
}
设y=5;
f(y);

Rust中禁止的事情是将不可变的引用更改为可变的引用。这是一个重要的区别,因为与借用的值相比,拥有的值总是可以安全地更改的。

完全可以将不可变变量重新绑定到可变变量,例如,以下代码可以工作:

let x = 5;
let mut x = x;
在最后一个语句之后,我们可以变异
x
变量。事实上,思想上有两个变量,第一个是移动到最新的。该功能也可以执行同样的操作:

fn f(mut x:i32){
x+=1;
}
设y=5;
f(y);

Rust中禁止的事情是将不可变的引用更改为可变的引用。这是一个重要的区别,因为与借来的值相比,拥有的值总是可以安全地更改的。

让mut x=x
不是很常见,
mut
参数更常见,
let x=x
也是。我相信
让mut x=x
在函数参数的形式中相当常见,例如
fn f(mut self){..}
不是很常见,
mut
参数更常见,
let x=x
也是。我相信
让mut x=x
在函数参数的形式中相当常见,例如
fn f(mut self){..}
。这句话并没有说,一个不可变的变量变成了一个可变的变量。它说物体的所有权转移了。此后,接收者是唯一的所有者,可以用它做任何事情。所发生的事情与类似。是的,谢谢。我明白了。这句话并没有说,一个不变的变量变成了一个可变的变量。它说物体的所有权转移了。此后,接收者是唯一的所有者,可以用它做任何事情。所发生的事情与类似。是的,谢谢。我明白了。