2014-07-18 3 views
14

Voglio passare un array a una funzione e modificare il contenuto al suo interno. Come posso farlo, questo è il mio codice qui sotto, ma ovviamente non funziona.Come passare un array a una funzione in Rust e modificarne il contenuto?

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

sto ottenendo l'errore: "non può assegnare al immutabili contenuti vec arr[..]".

Sono stato a cercare in giro, ma come un programmatore Rust piuttosto novizio, non riesco a trovare nulla. Inoltre, non aiuta Rust a cambiare la sua lingua parecchio, quindi molti metodi per farlo sono deprecati o rimossi.

risposta

27

riferimenti Rust (indicati con & segno) sono di due tipi: immutabili (&T) e mutabili (&mut T). Al fine di modificare il valore dietro il riferimento, questo riferimento deve essere mutevole, in modo che solo bisogno di passare &mut [i32] alla funzione, non &[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]); 
} 

È inoltre non è necessario mut arr in change_value argomento perché mut indica la mutabilità di quella variabile, non dei dati a cui punta. Pertanto, con mut arr: &[int] è possibile riassegnare lo stesso arr (in modo che punti a una sezione diversa), ma non è possibile modificare i dati a cui fa riferimento.