मुझे जंग में ref
पैटर्न को समझने में समस्याएं हैं। मैं https://rustbyexample.com/scope/borrow/ref.htmlउदाहरण के आधार पर जंग: रेफ पैटर्न
यहाँ की चर्चा करते हुए कर रहा हूँ कोड मुझे समझ नहीं आता है:
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
के बराबर होना चाहिए, मूल 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
पर एक पूर्णांक नहीं जोड़ सकते क्योंकि यह एक संदर्भ है। मुझे लगता है कि मैं उलझन में आया क्योंकि जब आप प्रिंट करते हैं तो संदर्भ का कोई संकेत नहीं होता है।