如何将数组传递给Rust中的函数并更改其内容?

cha*_*man 26 arrays rust

我想将一个数组传递给一个函数并更改其中的内容.我怎么能这样做,这是我下面的代码,但当然它不起作用.

fn change_value(mut arr: &[i32]) {
    arr[1] = 10;
}

fn main() {
    let mut arr: [int; 4] = [1, 2, 3, 4];
    change_value(&arr);
    println!("this is {}", arr[1]);
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:"无法分配给不可变的vec内容__CODE__".

我一直在寻找,但作为一个漂亮的新手Rust程序员,我找不到任何东西.另外,Rust对其语言进行了大量修改并没有帮助,因此很多方法都被弃用或删除了.

Vla*_*eev 46

Rust引用(用&符号表示)有两种:immutable(&T)和mutable(&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]);
}
Run Code Online (Sandbox Code Playgroud)

你也不用mut arrchange_value因为争论mut有没有表示它指向的数据的变量的可变性.因此,mut arr: &[int]您可以重新分配arr自己(因为它指向不同的切片),但您无法更改它引用的数据.