1 उत्तर

सबसे बढ़िया उत्तर

अच्छा, सरल, क्या इसका कोई मतलब है? लिस्कोव प्रतिस्थापन के बारे में सोचें।

सहप्रसरण

यदि A <: B, तो क्या C[A] पास करने का कोई मतलब है जहां C[B] अपेक्षित है? अगर ऐसा है, तो इसे C[+T] बना लें। क्लासिक उदाहरण अपरिवर्तनीय List है, जहां List[A] को List[B] की अपेक्षा करने वाली किसी भी चीज़ को पास किया जा सकता है, यह मानते हुए कि A B का एक उपप्रकार है।

दो काउंटर उदाहरण:

उत्परिवर्तनीय अनुक्रम अपरिवर्तनीय हैं, क्योंकि अन्यथा सुरक्षा उल्लंघन होना संभव है (वास्तव में, जावा का सह-संस्करण Array केवल ऐसी चीजों के लिए असुरक्षित है, यही कारण है कि यह स्कैला में अपरिवर्तनीय है)।

अपरिवर्तनीय Set अपरिवर्तनीय है, भले ही इसके तरीके अपरिवर्तनीय Seq के समान हों। अंतर contains के साथ है, जो सेट पर टाइप किया गया है और अनुक्रमों पर अनटाइप्ड (यानी, Any स्वीकार करें)। इसलिए, भले ही इसे सह-संस्करण बनाना संभव होगा, एक विशेष विधि पर बढ़ी हुई प्रकार की सुरक्षा की इच्छा ने सह-भिन्नता पर अपरिवर्तन का विकल्प चुना।

कॉन्ट्रा-विचरण

अगर A <: B, क्या C[B] पास करने का कोई मतलब है जहां C[A] अपेक्षित है? अगर ऐसा है, तो इसे C[-T] बना लें। क्लासिक होने वाला उदाहरण Ordering है। जबकि कुछ असंबंधित तकनीकी समस्याएं Ordering को विपरीत-भिन्न होने से रोकती हैं, यह सहज है कि कोई भी चीज जो A के सुपर-क्लास को ऑर्डर कर सकती है, A भी ऑर्डर कर सकती है। यह इस प्रकार है कि Ordering[B], जो B प्रकार के सभी तत्वों, A के एक सुपरटाइप का आदेश देता है, को Ordering[A] की अपेक्षा करने वाली किसी चीज़ को पास किया जा सकता है।

जबकि स्काला का Ordering contra-variant नहीं है, Scalaz का आदेश अपेक्षा के अनुरूप भिन्न-भिन्न है। स्कालाज़ का एक अन्य उदाहरण इसका Equal है विशेषता

मिश्रित भिन्नता?

स्कैला में मिश्रित भिन्नता का सबसे दृश्यमान उदाहरण Function1 (और 2, 3, आदि) है। इसे प्राप्त होने वाले पैरामीटर में यह कॉन्ट्रा-वेरिएंट है, और जो रिटर्न करता है उसमें को-वेरिएंट है। ध्यान दें, हालांकि, Function1 का उपयोग बहुत सारे क्लोजर के लिए किया जाता है, और क्लोजर का उपयोग कई जगहों पर किया जाता है, और ये स्थान आमतौर पर होते हैं जहां जावा सिंगल एब्सट्रैक्ट मेथड क्लासेस का उपयोग करता है (या उपयोग करेगा)।

इसलिए, यदि आपके पास ऐसी स्थिति है जहां एक एसएएम वर्ग लागू होता है, तो यह संभवतः मिश्रित विपरीत-भिन्नता और सह-भिन्नता के लिए एक जगह है।

16
Daniel C. Sobral 12 मार्च 2011, 16:18