"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
और उन्हें अपने नाम स्थान ( इस संबंधित उत्तर में मार्टिन मॉर्गन के शब्दों में) के निर्माण के लिए अधिक सावधानीपूर्वक काम करने के लिए कहें ।