Ho problemi a comprendere il motivo ref
in Rust. Mi riferisco a https://rustbyexample.com/scope/borrow/ref.htmlRuggine con l'esempio: il modello di rif.
Ecco il codice che non capisco:
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
};
ottengo che l'ultima let
espressione è una sorta di pattern matching (?). Quindi è a mia conoscenza che ref ref_to_x
deve essere uguale a 0
, il valore x
dell'originale point
.
Ma non capisco cosa faccia effettivamente lo ref
. Quando aggiungo un po 'di codice come questo:
println!("x: {}", point.x);
println!("ref_to_x: {}", ref_to_x);
println!("*ref_to_x: {}", *ref_to_x);
ottengo sempre 0
, quindi non sembra essere una differenza. In qualche modo mi aspetterei un indirizzo di memoria per ref_to_x
mentre *ref_to_x
potrebbe essere nuovamente il valore di riferimento.
Posso sostituire sia ref ref_to_x
e *ref_to_x
con myx
e il codice funziona ancora. Qual è la differenza? Cosa fa esattamente ref
?
modifica: dopo aver letto dbaupps risposta e facendo qualche aggiunta con ref_to_x
e *ref_to_x
le cose sono diventate un po 'più chiare; non è possibile aggiungere un numero intero a ref_to_x
perché è un riferimento. Immagino di essere confuso perché non c'è alcuna indicazione di un riferimento quando ne stampi uno.