"Imports"की तुलना में सुरक्षित है "Depends"(और यह भी एक पैकेज का उपयोग करता है यह एक 'बेहतर नागरिक' के साथ अन्य पैकेजों के संबंध में है जो उपयोग करते हैं "Depends")।
"Depends"यह सुनिश्चित करने का एक निर्देश का प्रयास है कि दूसरे पैकेज से एक फ़ंक्शन दूसरे पैकेज को मुख्य खोज पथ (यानी पर्यावरण द्वारा लौटाई गई सूची search()) को संलग्न करके उपलब्ध है । हालांकि, यह रणनीति तब विफल हो सकती है जब बाद में लोड किया गया एक अन्य पैकेज, खोज पथ पर पहले से पहचाने गए फ़ंक्शन का नाम रखता है। चेम्बर्स ( SoDA ) फ़ंक्शन के उदाहरण का उपयोग करता है "gam", जो दोनों gamऔर mgcvपैकेज में पाया जाता है। यदि दो अन्य पैकेज लोड किए गए थे, उनमें से एक पर निर्भर करता है gamऔर एक के आधार पर mgcv, कॉल द्वारा पाया गया फ़ंक्शन gam()उस क्रम पर निर्भर करेगा जिसमें वे दो पैकेज संलग्न थे। अच्छा नही।
"Imports"किसी भी सहायक पैकेज के लिए एक निर्देश का उपयोग किया जाना चाहिए, जिनके कार्यों को नियमित खोज पथ पर करने के बजाय <imports:packageName>(तुरंत बाद खोजा गया <namespace:packageName>) में रखा जाना है। यदि ऊपर दिए गए उदाहरणों में से किसी एक ने "Imports"तंत्र का उपयोग किया (जिसमें फ़ाइल में भी निर्देश importया importFromनिर्देशों की आवश्यकता होती है NAMESPACE), तो मामलों में दो तरीकों से सुधार किया जाएगा। (1) पैकेज खुद को नियंत्रित करेगा कि कौन सा mgcvफ़ंक्शन उपयोग किया जाता है। (2) आयातित वस्तुओं के मुख्य खोज पथ को साफ रखने से, यह संभवतः दूसरे mgcvफ़ंक्शन पर अन्य पैकेज की निर्भरता को भी नहीं तोड़ पाएगा ।
यही कारण है कि नेमस्पेस का उपयोग करना एक अच्छा अभ्यास है, क्यों इसे अब सीआरएएन द्वारा लागू किया गया है, और (विशेष रूप से) क्यों उपयोग करने "Imports"से सुरक्षित है "Depends"।
एक महत्वपूर्ण चेतावनी जोड़ने के लिए संपादित:
नहीं है एक ऊपर सलाह के लिए दुर्भाग्य से आम अपवाद: यदि आपके पैकेज एक पैकेज पर निर्भर करता है Aजो अपने आप में "Depends"एक और पैकेज पर B, अपने पैकेज की संभावना भी संलग्न करना होगा Aएक साथ "Dependsनिर्देश।
ऐसा इसलिए है क्योंकि पैकेज में कार्यों Aको इस उम्मीद के साथ लिखा गया था कि पैकेज Bऔर इसके कार्य search()पथ से जुड़े होंगे ।
एक "Depends"निर्देश पैकेज को लोड और अटैच करेगा A, जिस बिंदु पर एक पैकेज प्रतिक्रिया में पैकेज निर्देशन की Aअपनी "Depends"इच्छा है, पैकेज Bको लोड और संलग्न किया जा सकता है। पैकेज में फ़ंक्शंस Aतब पैकेज में उन कार्यों को खोजने में सक्षम होंगे Bजिन पर वे भरोसा करते हैं।
एक "Imports"निर्देश लोड होगा, लेकिन पैकेज को संलग्न नहींA करेगा और पैकेज को न तो लोड करेगा और न ही संलग्न करेगा B। ( "Imports", सब के बाद, कि पैकेज लेखकों नाम स्थान प्रणाली का उपयोग कर रहे हैं, और है कि पैकेज की उम्मीद है Aका उपयोग करेंगे "Imports"किसी भी कार्यों के लिए बात करने के लिए में Bहै कि यह करने के लिए उपयोग की जरूरत है।) पैकेज में किसी भी कार्यों के लिए अपने कार्यों के द्वारा कॉल Aजो पैकेज में कार्यों पर भरोसा Bइच्छा फलस्वरूप विफल।
केवल दो समाधान या तो हैं:
Aएक "Depends"निर्देश का उपयोग करके अपने पैकेज को संलग्न करें ।
- लंबे समय में बेहतर, पैकेज के अनुचर से संपर्क करें
Aऔर उन्हें अपने नाम स्थान ( इस संबंधित उत्तर में मार्टिन मॉर्गन के शब्दों में) के निर्माण के लिए अधिक सावधानीपूर्वक काम करने के लिए कहें ।