"Imports"এর চেয়ে নিরাপদ "Depends"(এবং এটি ব্যবহার করে এমন অন্যান্য প্যাকেজগুলির ক্ষেত্রে এটি 'আরও ভাল নাগরিক' ব্যবহার করে একটি প্যাকেজ তৈরি করে "Depends")।
"Depends"মূল প্যাকেজের (অন্য যে পরিবেশের তালিকাটি ফিরে এসেছে search()) অন্য প্যাকেজ সংযুক্ত করে অন্য প্যাকেজ থেকে কোনও ফাংশন উপলব্ধ রয়েছে তা নিশ্চিত করার জন্য একটি নির্দেশিকা চেষ্টা করে । এই কৌশলটি অবশ্য ব্যর্থ করা যেতে পারে যদি পরে লোড করা অন্য প্যাকেজটি অনুসন্ধানের পথে আগে একটি অভিন্ন নামযুক্ত ফাংশন রাখে। চেম্বারস ( সোডায় ) ফাংশনের উদাহরণ ব্যবহার করে "gam"যা উভয় gamএবং mgcvপ্যাকেজগুলিতে পাওয়া যায় । যদি অন্য দুটি প্যাকেজ লোড করা হয়, তার মধ্যে একটি নির্ভর করে gamএবং একটি তার উপর নির্ভর করে mgcv, কলগুলির মাধ্যমে পাওয়া ফাংশনটি gam()সেই দুটি প্যাকেজ সংযুক্ত করা হয়েছিল তার ক্রমের উপর নির্ভর করবে। ভাল না.
নিয়মিত অনুসন্ধানের পথের পরিবর্তে যে "Imports"কোনও সমর্থনকারী প্যাকেজটির কাজগুলি <imports:packageName>(তত্ক্ষণাত <namespace:packageName>সন্ধানের পরে ) স্থাপন করা উচিত তার জন্য একটি নির্দেশিকা ব্যবহার করা উচিত । উপরের উদাহরণের প্যাকেজগুলির মধ্যে যে কোনও একটি যদি "Imports"মেকানিজম ব্যবহার করে (যার জন্য ফাইলটিতে প্রয়োজনীয়তা importবা importFromনির্দেশিকাও NAMESPACEথাকে) তবে বিষয়গুলি দুটি উপায়ে উন্নত হবে। (1) প্যাকেজটি নিজেই কোন mgcvক্রিয়াকলাপটি ব্যবহৃত হবে তার উপর নিয়ন্ত্রণ অর্জন করবে । (২) আমদানিকৃত বিষয়গুলির মূল অনুসন্ধানের পথটি পরিষ্কার রেখে, এটি অন্য প্যাকেজের অন্যান্য 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"নির্দেশিকা ব্যবহার করে আপনার প্যাকেজটি সংযুক্ত করুন package
- দীর্ঘমেয়াদে আরও ভাল, প্যাকেজটির রক্ষণাবেক্ষণকারীর সাথে যোগাযোগ করুন
Aএবং তাদের নাম স্থানটি ( এই সম্পর্কিত উত্তরে মার্টিন মরগানের ভাষায়) নির্মাণের জন্য আরও সতর্কতার সাথে কাজ করার জন্য বলুন ।