Tôi gặp sự cố khi hiểu mẫu ref
trong Rust. Tôi đề cập đến https://rustbyexample.com/scope/borrow/ref.htmlVí dụ: Mẫu ref
Đây là mã tôi không hiểu:
let point = Point { x: 0, y: 0 };
let _copy_of_x = {
// `ref_to_x` is a reference to the `x` field of `point`
let Point { x: ref ref_to_x, y: _ } = point;
// Return a copy of the `x` field of `point`
*ref_to_x
};
tôi nhận được rằng let
biểu hiện cuối cùng là một số loại phù hợp với mô hình (?). Vì vậy, đó là sự hiểu biết của tôi ref ref_to_x
phải bằng 0
, giá trị x
của số point
gốc.
Nhưng tôi không hiểu những gì ref
thực sự làm. Khi tôi thêm một số mã như thế này:
println!("x: {}", point.x);
println!("ref_to_x: {}", ref_to_x);
println!("*ref_to_x: {}", *ref_to_x);
Tôi luôn luôn có được 0
, do đó dường như không phải là một sự khác biệt. Bằng cách nào đó tôi mong đợi một địa chỉ bộ nhớ cho ref_to_x
trong khi *ref_to_x
có thể là giá trị đăng ký lại.
Tôi có thể thay thế cả hai ref ref_to_x
và *ref_to_x
bằng myx
và mã vẫn hoạt động. Có gì khác biệt? ref
làm gì chính xác?
chỉnh sửa: sau khi đọc câu trả lời của dbaupps và thực hiện một số bổ sung với ref_to_x
và *ref_to_x
mọi thứ trở nên rõ ràng hơn một chút; bạn không thể thêm số nguyên vào ref_to_x
vì đó là số tham chiếu. Tôi đoán tôi đã nhầm lẫn vì không có dấu hiệu của một tài liệu tham khảo khi bạn in một.