لوا الهجين مجموعة تجزئة الجدول ؛ لا توجد في أي مكان آخر ؟

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

سؤال

لوا ل تنفيذ الجداول الحفاظ على عناصره في قسمين:مجموعة جزء تجزئة جزء.

لا يوجد شيء من هذا القبيل في أي لغات أخرى ؟

نلقي نظرة على القسم 4, الجداول, في تنفيذ لوا 5.0.

لوا 5.1 البرمجية المصدر - الجدول.ج

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

المحلول

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

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

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

أنا لا ازعجت للتحقيق في كل وقت لاحق تطبيقات awk ، على سبيل المثال ، جنو Awk ، mawk ، وهلم جرا.

نصائح أخرى

تعديل: هذا لا يجيب على السؤال ، الذي كان حول التنفيذ.

أوعية فعلت ذلك أيضا.

إنه أمر يتراجع عن أن بعض اللغات تخلط بين العمليات التي تختلف في الآخرين:

  • قائمة الفهرسة - a[10]
  • الفهرسة الترابطية - a['foo']
  • الوصول إلى حقل الكائن - a.foo
  • مكالمات الوظيفة/الطريقة - a('foo') / a.foo()

أمثلة غير مكتملة للغاية:

  • Perl هي اللغة النادرة التي يكون فيها الفهرسة المتتابعة/الترابطية بناء جملة منفصلة - a[10] / a{'foo'}. AFAIK ، خريطة حقول الكائن إلى إحدى العمليات الأخرى ، اعتمادًا على أن تطبيق الفصل يشعر باستخدامه.

  • في بيثون ، كل 4 متميزة. فهرسة التسلسل/الترابطية استخدم نفس بناء الجملة ولكن يتم تحسين أنواع البيانات المنفصلة لهم.

  • في روبي ، حقول الكائنات هي طرق بدون حجج - a.foo.

  • في جافا سكريبت ، حقول الكائنات a.foo هي بناء جملة السكر لفهرسة الترابط a['foo'].

  • في Lua و Awk ، يتم استخدام المصفوفات الترابطية أيضًا للفهرسة المتسلسلة - a[10].

  • في قوس, يبدو أن الفهرسة المتسلسلة والترابطية تشبه مكالمات الوظائف - (a 10) / (a "foo"), وأعتقد a.foo هو بناء الجملة السكر لهذا أيضا (؟).

أقرب شيء يمكنني التفكير فيه هو JavaScript - يمكنك إنشاء صفيف مع new Array(), ، ثم انتقل إلى الفهرس إما حسب الرقم أو حسب قيمة السلسلة. قد يكون الأمر جيدًا لأسباب يتمتع بعض تطبيقات JavaScript باختيار القيام بذلك باستخدام صفيفتين ، للأسباب المذكورة في وثائق LUA التي ربطتها.

arraywithhash هو تنفيذ سريع لـ Array-Hashtable Hybrid في C ++.

نظرًا لأن C ++ هي لغة مكتوبة بشكل ثابت ، فإن مفاتيح عدد صحيح فقط مسموح بها في Arraywithhash (لا توجد طريقة لإدراج سلسلة أو مفتاح المؤشر). بمعنى آخر ، إنه شيء مثل صفيف مع نسخة احتياطية من طاولة التجزئة للمؤشرات الكبيرة. كما أنه يستخدم تطبيق جدول التجزئة المختلفة وهو أقل كفاءة في الذاكرة من تطبيق جدول LUA.

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