Подтвердить что ты не робот

Как передать массив функции в 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]);
}

Я получаю эту ошибку:

error[E0412]: cannot find type 'int' in this scope
 --> src/main.rs:6:20
  |
6 |         let mut arr: [int; 4] = [1, 2, 3, 4];
  |                       ^^^ not found in this scope

Я искал вокруг, но, как довольно начинающий программист Rust, я ничего не могу найти.

4b9b3361

Ответ 1

Ссылки ржавчины (обозначаются знаком &) имеют два вида: неизменяемый (&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 сам (чтобы он указывал на другой фрагмент), но вы не можете изменить данные, которые он ссылается.