我想将数组传递给函数并更改其中的内容:
fn change_value(mut arr: &[i32]) {
arr[1] = 10;
}
fn main() {
let mut arr: [i32; 4] = [1, 2, 3, 4];
change_value(&arr);
println!("this is {}", arr[1]);
}
我收到此错误:
warning: variable does not need to be mutable
--> src/main.rs:2:17
|
2 | fn change_value(mut arr: &[i32]) {
| ----^^^
| |
| help: remove this `mut`
|
= note: `#[warn(unused_mut)]` on by default
error[E0594]: cannot assign to `arr[_]` which is behind a `&` reference
--> src/main.rs:3:5
|
2 | fn change_value(mut arr: &[i32]) {
| ------ help: consider changing this to be a mutable reference: `&mut [i32]`
3 | arr[1] = 10;
| ^^^^^^^^^^^ `arr` is a `&` reference, so the data it refers to cannot be written
warning: variable does not need to be mutable
--> src/main.rs:7:9
|
7 | let mut arr: [i32; 4] = [1, 2, 3, 4];
| ----^^^
| |
| help: remove this `mut`
我一直在四处寻找,但一无所获。
Rust 参考文献(用&
符号)有两种: 不可变(&T
) 和可变 (&mut T
)。为了更改引用后面的值,该引用必须是可变的,因此您需要:
- accept
&mut [i32]
作为函数参数,而不是&[i32]
- pass
&mut arr
到函数,而不是&arr
:
fn change_value(arr: &mut [i32]) {
arr[1] = 10;
}
fn main() {
let mut arr: [i32; 4] = [1, 2, 3, 4];
change_value(&mut arr);
println!("this is {}", arr[1]);
}
你不需要mut arr
in change_value
的论点是因为mut
There 表示该变量的可变性,而不是它所指向的数据的可变性。和mut arr: &[i32]
你可以重新分配arr
本身(使其指向不同的切片),但您无法更改它引用的数据。
如果您想接受array代替slice,你也可以这样做:
fn change_value(arr: &mut [i32; 4]) {
arr[1] = 10;
}
也可以看看:
- 将“mut”放在变量名之前和“:”之后有什么区别? https://stackoverflow.com/q/28587698/155423
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)