سؤال

يمكن أن تحتوي الملفات والدلائل مساحات أسماء مختلفة، ولا تزال تستخدم لتحديد ملفات محددة، لأن الملف والدليل بنفس الاسم يمكن تمييزه من خلال أن تكون أنواعا مختلفة من الأشياء.

يمكن أن يكون للحقل البدائي الحقول المرجعية أيضا مساحات أسماء مختلفة (في Java)، لأنه إذا كان لحقل مرجعي بدائي ويمكن تحديده من خلال أن تكون أنواعا مختلفة من الأشياء.

تستخدم مساحات أسماء منفصلة في أماكن أخرى مثل هذا. على سبيل المثال، في جافا، يمكنك الحصول على طريقة exampleName() وحقل exampleName, وعلى الرغم من أن لديهم نفس الاسم، يتم تمييزها من خلال أن تكون أنواعا مختلفة من الأشياء.

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

المحلول

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

بالإضافة إلى ذلك، النظر في ارتباك المستخدم النهائي الذي قد ينشأ. لدينا حاليا نوع من Namespacing متوفر في نظام الملفات باستخدام ملحقات الملفات. يمكنك الحصول على file.txt و file.dll و file.exe كل موجود في نفس الدليل. ما يحدث عندما تكون هذه الملفات موجودة في وقت واحد مسألة مصدر قلق - كانت هذه طريقة واحدة لكتاب الفيروسات لاستخدام شكل من أشكال الهندسة الاجتماعية لتحملك للنقر فوق الملف الخطأ. تخيل إذا كنت تستطيع الخلط بين دليل مع ملف من نفس الاسم كذلك؟

نصائح أخرى

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

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

cp foo bar

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

الدلائل والملفات ليست بالضرورة مختلفة جدا. إن كلا من الإدخالات في الدليل الودي، فقط مع العلم للإشارة إلى ما إذا كان إدخال دليل أم لا. يمكنك فتح دليل وقراءته تماما كما لو كان ملف، فقط أن بعض العمليات الأخرى ممكنة على الروابط الرمزية تعمل بنفس الطريقة. (هذا الوصف متحيز نحو عرض نظام الملفات UNIX، لكنني أعتقد أن عرض DOS / Windows يعمل بنفس الطريقة بنفس الطريقة). ضمن أي دليل، هناك مجموعة من أسماء الأعضاء، وينفذ نظام الملفات قيد التفرد من أن الدليل يمكن أن يكون لديك عضو واحد فقط باسم معين.

التفكير في أسماء أسماء Java مقارنة بأسماء الحقول --- مرة أخرى في C، لا يمكنك الحصول على وظيفة عالمية ومتغير عالمي بنفس الاسم، لأن جميع الرموز الموجودة في ملف الكائنات في مساحة اسم واحدة. ولكن يمكنك مع C ++، لأن وظيفة "Void Foo ()" تم تعيينها إلى اسم الرمز المشترك ("foo__vv" أو أي شيء). لذلك ليس الكثير منهم مساحة اسم منفصلة، ​​لأن المفتاح في مساحة الاسم يختلف عن حقل "foo" vs طريقة "foo ()". بالنظر إلى أنك لا تستطيع الحصول على اشتباكات رئيسية، فإنها تبدو وكأنها مساحات أسماء منفصلة، ​​ولكن هل حقا كيف يتم تنفيذها؟

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