web-dev-qa-db-fra.com

Comment passer un tableau à une fonction dans Rust et changer son contenu?

Je veux passer un tableau à une fonction et changer le contenu à l'intérieur. Comment puis-je faire cela, voici mon code ci-dessous, mais bien sûr, cela ne fonctionne pas.

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]);
}

Je reçois cette erreur:

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

J'ai cherché autour, mais en tant que jolie novice Rust programmeur, je ne trouve rien.

27
chapman

Références rouille (désignées par & signe) sont de deux types: immuables (&T) et mutable (&mut T). Afin de changer la valeur derrière la référence, cette référence doit être modifiable, il vous suffit donc de passer &mut [i32] à la fonction, pas &[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]);
}

Vous n'avez pas non plus besoin de mut arr dans change_value argument parce que mut indique la mutabilité de cette variable, pas des données vers lesquelles elle pointe. Donc avec mut arr: &[int] vous pouvez réaffecter arr lui-même (pour qu'il pointe vers une autre tranche), mais vous ne pouvez pas modifier les données auxquelles il fait référence.

44
Vladimir Matveev