Bạn có một vài vấn đề:
Bạn đã đặt &mut
ở địa điểm sai; &mut
là một phần của loại, không phải là đối số (trừ khi bạn đang hủy hoại đối số, mà bạn không phải là đối số).
Bạn không thể gọi đối số struct
, bởi vì đó là từ khóa.
Bạn không thể chỉ định cho tham chiếu có thể thay đổi được bằng chỉ định thẳng.
Như vậy, với những ý nghĩ đó, đây là một giải pháp làm việc:
#[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);
}
Mấu chốt ở đây là ref
trong một mô hình liên kết bằng cách tham chiếu; kết hợp điều đó với mut
cung cấp cho bạn một tham chiếu có thể thay đổi. Cụ thể, nó cung cấp cho bạn một cặp &mut i32
s. Vì đây là các tham chiếu, bạn phải bỏ tham chiếu chúng để gán thông qua chúng (nếu không, bạn sẽ cố gắng chỉ định lại tham chiếu).
Nguồn
2015-07-23 18:23:32