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

时间:2014-07-18 18:47:19

标签: arrays rust

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

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也很难改变它的语言,因此很多方法都被弃用或删除了。

1 个答案:

答案 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本身(因为它指向不同的切片),但您无法更改它引用的数据。