Ich habe Probleme mit dem Verständnis der ref
Muster in Rust. Ich beziehe mich auf https://rustbyexample.com/scope/borrow/ref.htmlRust mit gutem Beispiel: Die ref Muster
Hier ist der Code, den ich nicht verstehe:
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
};
ich, dass der letzte let
Ausdruck eine Art Mustervergleich ist (?). So ist es mein Verständnis ref ref_to_x
sollte 0
, der x
Wert der ursprünglichen point
gleich sein.
Aber ich verstehe nicht, was die ref
tatsächlich der Fall ist. Wenn ich einige Code wie folgt hinzu:
println!("x: {}", point.x);
println!("ref_to_x: {}", ref_to_x);
println!("*ref_to_x: {}", *ref_to_x);
Ich bekomme immer 0
, so scheint es kein Unterschied zu sein. Irgendwie würde ich eine Speicheradresse erwartet für ref_to_x
während *ref_to_x
könnte wieder den dereferenzierten Wert sein.
Ich kann sowohl als auch *ref_to_x
durch myx
ersetzen und der Code funktioniert immer noch. Was ist der Unterschied? Was macht ref
genau?
edit: nach dem Lesen dbaupps beantworten und einige Ergänzungen mit ref_to_x
und *ref_to_x
Dinge tun, wurde ein bisschen klarer; Sie können ref_to_x
keine ganze Zahl hinzufügen, weil es eine Referenz ist. Ich glaube, ich war verwirrt, weil es keinen Hinweis auf eine Referenz gibt, wenn Sie eine drucken.