2012-10-14 21 views
5

में सबटाइपिंग और टाइप पैरामीटर मैं स्कैला के लिए नया हूं, और वर्तमान में स्कैला में टाइप पैरामीटर के बारे में सीख रहा हूं जहां मैं निम्नलिखित परिदृश्य में आया था।स्कैला

मान लें कि मेरे पास 2 कक्षा A और B है, जहां BA का उप प्रकार है।

class A { 
... 
} 

class B extends A { 
... 
} 

तो मैं B <: A कह सकता हूं।

क्या इसका मतलब List[B] <: List[A] भी है?

+3

यह मार्टिन ओडर्स्की (https://class.coursera.org/progfun-2012-001/lecture/83) से स्कैला पाठ्यक्रमों को भी समझाया गया है, लेकिन आपको नामांकन करना होगा, लेकिन यह लायक है यह :-) –

उत्तर

19

सूची के मामले में, यह B <: A वास्तव में List[B] <: List[A] का संकेत देता है, क्योंकि सूची का प्रकार पैरामीटर covariant है। एक प्रकार पैरामीटर covariant बनाने का मतलब है कि यह केवल सूची की परिभाषा में covariant पदों में दिखाया जा सकता है, यानी यह केवल एक विधि के वापसी प्रकार के रूप में दिखाई दे सकता है, पैरामीटर के प्रकार के रूप में नहीं। "स्कैला का दौरा" में variance के बारे में एक अनुभाग शामिल है। विकिपीडिया में भी एक अच्छा article about variance है। एक प्रकार पैरामीटर के विचरण के लिए तीन विकल्प हैं:

  • निश्चरता: C[A]C[B] की एक उप-प्रकार, कोई बात नहीं क्या A और B के बीच संबंध है नहीं है। इसके उदाहरण उत्परिवर्तनीय डेटा संरचनाएं जैसे कि सरणी हैं।
  • कॉन्वर्स: B <: A का अर्थ C[B] <: C[A] है। उदाहरण अपरिवर्तनीय डेटा संरचनाएं या रिटर्न प्रकार के फ़ंक्शन हैं।
  • contravariance: A <: BC[B] <: C[A] का तात्पर्य है। उदाहरण के लिए, कार्य उनके पैरामीटर के प्रकार में contravariant हैं।