Hai qualche problema:
Hai inserito lo &mut
nel posto sbagliato; &mut
è parte del tipo, non dell'argomento (a meno che tu non stia distruggendo l'argomento, che tu non sia).
Non è possibile chiamare l'argomento struct
, poiché si tratta di una parola chiave.
Non è possibile assegnare a un riferimento modificabile con assegnazione diretta.
Così, con quelli in mente, ecco una soluzione di lavoro:
#[derive(Debug)]
struct MyStruct {
tuple: (i32, i32),
}
fn function(s: &mut MyStruct) {
let (ref mut val1, ref mut val2) = s.tuple;
*val1 = 1;
*val2 = 2;
}
fn main() {
let mut s = MyStruct { tuple: (0, 0) };
function(&mut s);
println!("{:?}", s);
}
La chiave qui è che ref
in un modello lega per riferimento; combinandolo con mut
si ottiene un riferimento mutabile. In particolare, ti dà un paio di &mut i32
s. Dato che si tratta di riferimenti, devi de-referenziarli per assegnarli attraverso di essi (altrimenti, staresti cercando di riassegnare il riferimento stesso).
fonte
2015-07-23 18:23:32