2015-04-02 10 views
6

मैं जंग के लिए नया हूँ। मुझे लगता है कि use का उपयोग मौजूदा क्षेत्र में पहचानकर्ताओं को आयात करने के लिए किया जाता है और extern बाहरी मॉड्यूल घोषित करने के लिए उपयोग किया जाता है। लेकिन यह समझ (शायद गलत) मुझे कोई समझ नहीं लेती है। क्या कोई समझा सकता है कि जंग के पास इन दो अवधारणाएं क्यों हैं और इनका उपयोग करने के लिए उपयुक्त मामले क्या हैं?उपयोग और बाहर के बीच क्या अंतर है?

+3

क्या आप 'बाहरी क्रेट फू' ​​कथन का जिक्र कर रहे हैं? क्रेट्स और मॉड्यूल जंग में अलग अवधारणाएं हैं, आप शायद ["मूल शब्दावली: क्रेट्स और मॉड्यूल"] पर एक नज़र डालना चाहें (http://doc.rust-lang.org/1.0.0-alpha.2/book/ crates-and-modules.html) जो दोनों के बीच अंतर बताता है (हालांकि मुझे व्यक्तिगत रूप से अत्यधिक वर्बोज़ के नीचे उदाहरण मिलते हैं)। –

उत्तर

6

extern crate foo इंगित करता है कि आप बाहरी पुस्तकालय के खिलाफ लिंक करना चाहते हैं और शीर्ष-स्तरीय क्रेट नाम को दायरे में लाते हैं (use foo)। use bar अनिवार्य रूप से पूर्ण योग्यता वाले प्रतीकों का संदर्भ देने के लिए एक शॉर्टेंड है।

सैद्धांतिक रूप से, भाषा use की आवश्यकता नहीं है - आप हमेशा नामों को पूरी तरह अर्हता प्राप्त कर सकते हैं। लेकिन टाइपिंग std::str::String.new(...) बहुत कठिन हो जाएगा! इसके बजाए, आप केवल use std::str::String टाइप कर सकते हैं और फिर String इसका उल्लेख करेंगे। (String के लिए use बयान, प्रस्तावना का हिस्सा है तो आप आमतौर पर है कि नहीं दिख रहा है)

भाषा करता जरूरत extern - कि कैसे आप संकलक है कि आप एक टोकरा कि isn के खिलाफ लिंक करने के लिए जा रहे हैं सूचित है अपना खुद का नहीं

+1

'उपयोग' के बिना, हम' std' भी मुखौटा के रूप में नहीं हो सका। या तो हमारे पास एक एकल मोनोलिथिक मानक लाइब्रेरी क्रेट होगा, या हर कोई इस तथ्य से निपट रहा होगा कि 'स्ट्रिंग' वास्तव में' संग्रह :: स्ट्रिंग :: स्ट्रिंग' है। – delnan

संबंधित मुद्दे