私は錆でref
パターンを理解する問題を抱えています。 (?)私は最後let
式はパターンマッチングのいくつかの並べ替えであることを取得錆は: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
};
:私はここにhttps://rustbyexample.com/scope/borrow/ref.html
に私は理解していないコードされて参照しています。だから、それは私の理解ref ref_to_x
だ、オリジナルpoint
のx
値0
に等しくなければなりません。
しかし、私は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
に整数を追加することはできません。私はあなたが1つを印刷するときに参照の兆候がないので、私は混乱していると思う。 ref_to_x
はpoint.x
を格納するメモリに直接指している