作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将数组传递给函数并更改其中的内容:
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
)。为了更改引用背后的值,此引用必须是可变的,因此您需要:
&mut [i32]
作为函数参数,而不是 &[i32]
&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]);
}
你不需要在 change_value
的参数中使用 mut arr
因为 mut
表示该变量的可变性,而不是它的数据的可变性指着。使用 mut arr: &[i32]
您可以重新分配 arr
本身(使其指向不同的切片),但您不能更改它引用的数据。
如果您想接受数组而不是切片,您也可以这样做:
fn change_value(arr: &mut [i32; 4]) {
arr[1] = 10;
}
另见:
关于arrays - 如何将数组传递给 Rust 中的函数并更改其内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24831828/
我是一名优秀的程序员,十分优秀!