उपयोग और बाहरी के बीच अंतर क्या है?


91

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


6
क्या आप बयान का जिक्र कर रहे हैं extern crate foo;? क्रस्ट और मॉड्यूल रस्ट में अलग-अलग अवधारणाएं हैं, आप "बेसिक शब्दावली: क्रेट्स एंड मॉड्यूल्स" पर एक नज़र डालना चाहते हैं, जो दोनों के बीच अंतर को स्पष्ट करता है (हालांकि मैं व्यक्तिगत रूप से अत्यधिक क्रिया के नीचे के उदाहरण ढूंढता हूं)।
कंतस 94 हेवी

जवाबों:


91

extern crate fooइंगित करता है कि आप किसी बाहरी लाइब्रेरी से लिंक करना चाहते हैं और टॉप-लेवल क्रेट नाम को स्कोप (बराबर use foo) में लाता है । रुस्ट 2018 के अनुसार, ज्यादातर मामलों में आपको extern crateअब और उपयोग करने की आवश्यकता नहीं होगी क्योंकि कार्गो कंपाइलर को बताती है कि कौन से बक्से मौजूद हैं। ( एक या दो अपवाद हैं )

use bar पूरी तरह से योग्य प्रतीकों को संदर्भित करने के लिए एक आशुलिपि है।

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


3
इसके बिना use, हम यह भी नहीं कर सकते कि stdयह मुखौटा है। या तो हमारे पास एक एकल अखंड मानक पुस्तकालय टोकरा होगा, या हर कोई इस तथ्य Stringसे निपटेगा collections::string::String

52

लिखित के समय स्वीकृत उत्तर सही था। हालाँकि यह अब सही नहीं है। extern crateRust 2018 के बाद से लगभग कभी भी इसकी आवश्यकता नहीं है।

अब आपको केवल अपने Cargo.toml पर बाहरी निर्भरता जोड़ने की आवश्यकता है।

use पहले जैसा ही काम करता है।

आधिकारिक प्रलेखन में अधिक पढ़ें ।

संपादित करें: स्वीकृत उत्तर को अब Rust 2018 में परिवर्तनों को सही ढंग से दर्शाने के लिए संपादित किया गया है।


यहां तक ​​कि अगर यह आवश्यक नहीं है, तो क्या मानक लोगों से बाहरी बक्से को अलग करने में कोई लाभ नहीं है? जैसे extern crate failure;लेकिनuse std::error::Error
पॉल रज़वान बर्ग

2
@PaRRazvanBerg का मतलब सिर्फ यह स्पष्ट करना है कि कौन से आयात मानक पुस्तकालय से हैं और कौन से बाहरी आयात हैं? मेरे लिए कम से कम नहीं, और मुझे नहीं लगता कि इसकी सिफारिश की गई है। लेकिन मुझे लगता है कि आपको अपने कोड को उस तरह से संरचित करना चाहिए जिस तरह से आप महसूस करते हैं कि आपको सबसे ज्यादा समझ में आता है।
dropbear
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.