Masz kilka problemów:
Umieściłeś &mut
w niewłaściwym miejscu; &mut
jest częścią typu, a nie argumentem (chyba że destrukturyzujesz argument, którym nie jesteś). Nie można wywołać argumentu struct
, ponieważ jest to słowo kluczowe.
Nie można przypisać do zmiennej referencyjnej z prostym przyporządkowaniem.
Tak, z tych na uwadze, oto roztwór roboczy:
#[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);
}
Kluczem tutaj jest to, że ref
w układzie wiąże się przez odwołanie; łącząc to z mut
daje zmienną referencję. W szczególności daje parę &mut i32
s. Ponieważ są to odniesienia, musisz odwołać je, aby je przypisać (w innym przypadku próbujesz ponownie przypisać odniesienie).