我想将一个数组传递给一个函数并更改其中的内容。我怎么能这样做,这是我下面的代码,但当然它不起作用。
fn change_value(mut arr: &[int]) {
arr[1] = 10;
}
fn main() {
let mut arr: [int, ..4] = [1, 2, 3, 4];
change_value(arr);
println!("this is {}", arr[1]);
}
我收到错误:“无法分配给不可变的vec内容arr[..]
”。
我一直在寻找,但作为一个漂亮的新手Rust程序员,我找不到任何东西。另外,Rust也很难改变它的语言,因此很多方法都被弃用或删除了。
答案 0 :(得分:39)
Rust引用(由&
符号表示)有两种:不可变(&T
)和可变(&mut T
)。为了更改引用后面的值,此引用必须是可变的,因此您只需将&mut [i32]
传递给函数,而不是&[i32]
:
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
参数中也不需要change_value
,因为mut
表示该变量的可变性,而不是它指向的数据。因此,使用mut arr: &[int]
,您可以重新分配arr
本身(因为它指向不同的切片),但您无法更改它引用的数据。