पैटर्न बाध्यकारी कुछ करने के लिए का उपयोग कर प्राप्त कर सकते हैं;)
आदेश में समझने के लिए संकलक करता है, तो आप let _:() = ...;
चाल का उपयोग कर सकते हैं। ()
प्रकार के एक चर को असाइन करके, आप संकलक को एक त्रुटि संदेश मुद्रित करने के लिए मजबूर करते हैं जो आपको अपने चर के लिए अनुमानित प्रकार देता है।
पहले उदाहरण में:
let vec = vec![1, 2, 3];
let &y = &vec;
let _:() = y;
हम पाते हैं:
<anon>:5:17: 5:18 error: mismatched types:
expected `()`,
found `collections::vec::Vec<_>`
(expected(),
found struct `collections::vec::Vec`) [E0308]
<anon>:5 let _:() = y;
^
<anon>:5:17: 5:18 help: see the detailed explanation for E0308
y
के प्रकार Vec<i32>
है।
- एक अस्थायी
y
, जो क्योंकि vec
पहले से ही लिया गया है, मना किया है में vec
स्थानांतरित करने के लिए प्रयास कर रहा है में उधार vec
: क्या इसका मतलब है कि आप कर रहे हैं।
बराबर सही कोड होगा:
let vec = vec![1, 2, 3];
let y = vec;
दूसरे उदाहरण में:
let vec = vec![1, 2, 3];
let ref y = &vec;
let _:() = y;
हम पाते हैं:
<anon>:5:17: 5:18 error: mismatched types:
expected `()`,
found `&&collections::vec::Vec<_>`
(expected(),
found &-ptr) [E0308]
<anon>:5 let _:() = y;
^
<anon>:5:17: 5:18 help: see the detailed explanation for E0308
इस प्रकार y
&&Vec<i32>
है।
यह देखते हैं कि let ref a = b;
आमतौर पर let a = &b;
के बराबर है, और इसलिए इस मामले में: let y = &&vec;
।
ref
विनाश के लिए बनाया गया है; उदाहरण के लिए, यदि आप था:
let vec = Some(vec![1, 2, 3]);
if let Some(ref y) = vec {
}
आप ref
यहाँ का प्रयोग करेंगे y
करने के लिए बाध्य करने में सक्षम होना बिना आगे बढ़ भले ही vec
यहाँ लिखें Option<Vec<i32>>
है। वास्तव में, ref
का उद्देश्य के भीतर एक मौजूदा वस्तु को नष्ट करने के दौरान संदर्भ लेना है।
सामान्यतः, let
कथन में, आप ref
का उपयोग नहीं करेंगे।
के बारे में अधिक उदाहरण देख सकते हैं कि वहाँ एक कानूनी मामले में जब हम की तरह कुछ का उपयोग करना चाहते है 'जाने और y = &vec;'? – WiSaGaN
@WiSaGaN: मैं किसी के बारे में नहीं सोच सकता। –
@WiSaGaN: इस निर्माण का उपयोग उदाहरण के लिए बंद हो सकता है। यह फ़ेस में वर्क में बनाए रखा जाता है और इसी तरह। –