ref
पैटर्न में प्रयोग किया जाता है एक lvalue के लिए एक संदर्भ बाध्य करने के लिए (एक lvalue एक मूल्य है आप, का पता ले जा सकते हैं और अधिक या कम)।
यह समझना महत्वपूर्ण है कि पैटर्न सामान्य अभिव्यक्तियों से "पीछे की ओर" जाते हैं, क्योंकि इन्हें deconstruct मानों के लिए उपयोग किया जाता है।
यहां एक साधारण उदाहरण है। मान लीजिए कि हमें इस है:
let value = 42;
हम दो तरीकों से value
के लिए एक संदर्भ के लिए बाध्य कर सकते हैं:
let reference1 = &value;
let ref reference2 = value;
पहले मामले में, हम value
का पता लेने के लिए एक ऑपरेटर के रूप में &
का उपयोग करें। दूसरे मामले में, हम एक lvalue "deconstruct" करने के लिए ref
पैटर्न का उपयोग करें। दोनों स्थितियों में, चर का प्रकार &i32
है।
&
पैटर्न में भी उपयोग किया जा सकता है, लेकिन यह विपरीत है: यह इसे संदर्भित करके संदर्भ का निर्धारण करता है। मान लीजिए हमने:
let value = 42;
let reference = &value;
हम कर सकते हैं दो में भिन्नता reference
तरीके:
let deref1 = *reference;
let &deref2 = reference;
यहाँ, दोनों deref1
और deref2
i32
है प्रकार।
हालांकि, यहां दिखाए गए दो तरीकों से एक ही अभिव्यक्ति को लिखना हमेशा संभव नहीं होता है। उदाहरण के लिए, आप enum संस्करण में संग्रहीत मान का संदर्भ लेने के लिए &
का उपयोग नहीं कर सकते हैं: आपको उस पर मिलान करने की आवश्यकता है।
match option {
Some(ref value) => { /* stuff */ }
None => { /* stuff */ }
}
वहाँ जंग में कोई रास्ता नहीं आप अन्यथा मूल्य का उपयोग करने की &
ऑपरेटर का उपयोग कर सकते है के बाद से: उदाहरण के लिए, यदि आप एक Some
में मूल्य के लिए एक संदर्भ लेना चाहते हैं, आप लिखते हैं की जरूरत है।
* बहुत * संबंधित है, लेकिन नहीं वास्तव में एक नकली है, यह 'ref' और' और 'जो comparsion नहीं है के बाद से: http://stackoverflow.com/questions/27911656/rust-by-example-the-ref- पैटर्न – Kroltan