الفرق بين أنواع Scala الوجودية وأحرف البدل الخاصة بـ Java بالقدوة؟

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

سؤال

أكثر تحديدًا قليلاً من سؤال Stack Overflow ما هو النوع الوجودي؟, ما هو الفرق بين سكالا أنواع وجودية وجافا حرف البدل, ، ويفضل مع بعض الأمثلة التوضيحية؟

في كل ما رأيته حتى الآن، يبدو أنهما متساويان إلى حد كبير.

عدد قليل من المراجع.مارتن أودرسكي يذكرهم;جوجل أعلى نتيجة لسؤالي:

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

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

المحلول

هذه هي إجابة Martin Odersky على القائمة البريدية لمستخدمي Scala:

قيل لي وقد قرأت في ورقة Fool '05 على Wild FJ أن النسخة النهائية من Wildcards لديها بعض الاختلافات الدقيقة مع أنواع الوجودية.

لذلك يبدو أن أنواع Scala الوجودية وأحرف البدل Java متكافئة نوعًا ما

نصائح أخرى

من المفترض أن تكون متكافئة، حيث أن هدفها الرئيسي هو التفاعل مع أحرف البدل الخاصة بـ Java.

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

على سبيل المثال، في سكالا:

scala> def foo(x : List[_ >: Int]) = x
foo: (x: List[_ >: Int])List[Any]

يأخذ foo قائمة من المعلمات ذات الحد الأدنى من Int.

إجابة أكثر تفصيلاً لمارتن أوديرسكي (يمكن العثور على الباقي هنا):

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

ال List[_] التدوين (والذي تشير الإجابات الأخرى إليه هو نظير أكثر قوة لـ Java List[?]) هي حالة متدهورة من فكرة أكثر عمومية من النوع الوجودي في سكالا.

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