У меня проблемы с пониманием модели ref
в ржавчине. Я имею в виду https://rustbyexample.com/scope/borrow/ref.htmlРжавчина пример: Образец ref
Вот код, который я не понимаю:
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
};
Я понимаю, что последнее let
выражение своего рода сопоставления с образцом (?). Поэтому я понимаю, что ref ref_to_x
должен быть равен 0
, значение x
оригинала point
.
Но я не понимаю, что на самом деле делает ref
. Когда я добавить некоторый код, как это:
println!("x: {}", point.x);
println!("ref_to_x: {}", ref_to_x);
println!("*ref_to_x: {}", *ref_to_x);
Я всегда получаю 0
, так не кажется, что будет разница. Как-то я ожидаю адрес памяти для ref_to_x
, а *ref_to_x
может быть разыменованным значением.
Я могу заменить оба ref ref_to_x
и *ref_to_x
myx
и код все еще работает. Какая разница? Что делает ref
?
изменить: после прочтения dbaupps ответьте и сделайте некоторое добавление с ref_to_x
и *ref_to_x
вещи стали немного яснее; вы не можете добавить целое число в ref_to_x
, потому что это ссылка. Наверное, я запутался, потому что нет указания на ссылку, когда вы ее печатаете.