هل يعد "الاستيراد الضمني" أمرًا سيئًا دائمًا في حزم دلفي؟

StackOverflow https://stackoverflow.com/questions/1215664

سؤال

أحاول إعادة ترتيب حزمي لمجموعة من مكونات TFrame المنحدرة, ، أجد أنه من الضروري على ما يبدو فصل بعض عناصر TFrame المساعدة الخاصة بي عن نماذج الحوار التي تستخدمها، ويرجع ذلك أساسًا إلى أن الأول مسجل في اللوحة كمكونات حقيقية ويبدو أن هذا يربك IDE أحيانًا فيما يتعلق بـ نماذج الحوار التي تستخدمها.يتم استدعاء نماذج الحوار بدورها بواسطة مكونات غير مرئية، والتي تعد جزءًا من حزمة ثالثة.هذا، حتى الآن, ، يبدو أنه يصنع معظم المترجم الشكاوى المتعلقة بالتبعية / الارتباكات تذهب بعيدا.(لكنني لم أخرج بعد).

عند تجميع الحزمة مع نماذج الحوار (التي تستدعي الإطارات)، أتلقى التحذير "تم استيراد الوحدة 'MyFrames' ضمنيًا إلى الحزمة 'MyDialogForms'"

نظرًا لأنه يظهر كتحذير للمترجم، فقد حصلت منذ فترة طويلة على انطباع بأن "الاستيراد الضمني" لوحدة ما ليس بالأمر الجيد بشكل عام.هل هناك حالات محددة حيث لم يكن الأمر كذلك؟أي.حيث يكون استيراد وحدة ضمنيًا أمرًا مقبولًا و/أو ممارسة مناسبة؟...وإذا كان الأمر كذلك، ما هي تلك الحالات المحددة؟

هل كانت مفيدة؟

المحلول

ها هي القضية:

يمكنك الحصول على نسخة واحدة فقط من الوحدة في برنامجك.إذا حاولت تحميل نفس الوحدة مرتين عبر الحزم، فسيؤدي ذلك إلى ظهور استثناء ولن يتم تحميل الحزمة في المرة الثانية.طريقة تجنب ذلك هي تنظيم حزمك بحيث لا يتم استخدام أي وحدة في أكثر من واحدة منها.

يجب أن يكون الكود الخاص بكل وحدة تقوم بتجميعها موجودًا في ملف package.سيبدأ المترجم بجميع الوحدات التي تعلن عنها في الملف يتضمن القسم، ولكن يجب أيضًا تجميع أي وحدات أخرى تستخدمها هذه الوحدات بحيث يمكن الوصول إليها، ما لم تكن هذه الوحدات موجودة في حزمة أخرى مدرجة تحت يتطلب.هذه الإضافات هي الوحدات "المستوردة ضمنيًا".المشكلة هي أنها مستوردة بشكل ضمني, ، لم يرد صراحة في يتضمن القسم الذي ستظهر فيه بشكل ملائم في مدير المشروع الموجود على اليمين.وهذا يعني أنك قد لا تلاحظ أن وحدتك موجودة في عبوة، وينتهي بك الأمر بوضعها في عبوة أخرى.ثم عندما تحاول تشغيل البرنامج وتحميل الحزم، تنقطع الأمور.ولهذا السبب يحذرك المترجم من ذلك.

إنه تحذير، وليس خطأ، لسبب ما.طالما أنك تفهم كيفية عمل النظام، فمن الآمن تقنيًا استخدام عمليات الاستيراد الضمنية.فقط تذكر أن هذه الوحدات سينتهي بها الأمر في الحزمة سواء أعلنت عنها أم لا.ولكن مرة أخرى، بما أنهم سينتهيون هناك سواء أعلنتهم أم لا، فمن الأسهل على الأرجح إضافتهم رسميًا وتوفير المتاعب على نفسك.

نصائح أخرى

+1 ل الجواب ميسون.المكان الذي تصبح فيه الوحدات المستوردة ضمنيًا مشكلة هو مشروع كبير حيث يصبح من الصعب بشكل كبير تتبع الوحدات المرتبطة من أي مكان.

أجد أن أفضل طريقة حتى الآن هي أن يكون لديك مجلد لكل حزمة، ويحتوي هذا المجلد على جميع ملفات الحزمة.إذا رأيت تحذير "استيراد ضمني"، فإما أن أضيف الحزمة المطلوبة، أو أضيف الوحدة إلى الحزمة.لذلك يتم تحديد جميع الوحدات في الحزمة التي تحتوي عليها وتكون جميعها في نفس المجلد.لا أقوم أبدًا بإضافة مجلدات إلى مسار البحث، لأن كل مشروع يعرف جميع ملفاته مباشرةً.

ليس من الصعب حقًا الحفاظ على البنية وهي تحميك من المشاكل التي تحتوي فيها الوحدات المختلفة على إصدارات مختلفة من الملف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top