types - Odd typing bug in Scala -


इस पर एक नज़र डालें:

  scala & gt; वर्ग कंटेनर (वैल पंक्तियां: इटेरेबल [एटेरेबल [विकल्प [कोई भी]]]) {} परिभाषित क्लास कंटेनर स्काले & gt; वैल पंक्ति 1 = अर्रे (कुछ ("परीक्षा"), कुछ (1234)) पंक्ति 1: सरणी [कुछ [कोई]] = अर्रे (कुछ (परीक्षण), कुछ (1234) स्केल & gt; वैल पंक्ति 2 = अर्रे (कुछ ("टेस्ट 2"), कुछ (12345)) पंक्ति 2: अर्रे [कुछ [कोई]] = अर्रे (कुछ (टेस्ट 2), कुछ (12345) स्केल & gt; (कुछ (परीक्षा), कुछ (1234)), अर्रे (कुछ (टेस्ट 2), कुछ (12345)) सूची (पंक्ति 1, पंक्ति 2) सूची: सूची [एरे [कुछ [कोई]] = सूची स्केला & gt; Val परीक्षण = नया कंटेनर (listtest) & lt; कंसोल & gt;: 11: त्रुटि: प्रकार बेमेल; पाया: सूची [एरे [कुछ [कोई]]] आवश्यक: अटल [एटेरेबल [विकल्प [कोई]]] वेल टेस्ट = नया कंटेनर (लिस्टेस्ट) ^ स्काले & gt; वैल परीक्षण = नया कंटेनर (सूची (पंक्ति 1, पंक्ति 2)) परीक्षण: कंटेनर = कंटेनर @ 600 ए 080   

कंटेनर को दूसरे तरीके से कैसे काम करता है, लेकिन पहले नहीं करता है? क्या ऐसा नहीं है?

यह कोई बग नहीं है सरणी संप्रदाय नहीं है बी बी की एक उपप्रकार है, वह ऐरे [ए] के एक उपप्रकार नहीं है। यह जावा के विपरीत है, जहां बी [] ए [] की एक उपप्रकार है, जो अस्वस्थ है:

  ए [] बी = नया बी [1]; बी [0] = नया (ए); - & gt; ArrayStoreException   

तो आपका ऐरे [कुछ [कोई]] कोई ऐरे नहीं है [विकल्प [कोई]] आपको यह सुनिश्चित करना होगा कि आपके पास एक एरे [विकल्प] है, जो आप

  वेल पंक्ति 2 = ऐरे [विकल्प [कोई]] (कुछ (टेस्ट 2), कुछ (12345)) के साथ कर सकते हैं   

आप आइटम में से किसी एक प्रकार के परभक्ष का भी उपयोग कर सकते हैं:

  वैल पंक्ति 2 = अर्रे (कुछ (परीक्षण 2): विकल्प [स्ट्रिंग], कुछ (12345 ))   

या यदि आप जानते हैं कि आपके मान शून्य हैं, तो

  वेल पंक्ति 2 = सरणी (विकल्प (परीक्षण 2), विकल्प (12345)) < / Code>  

(यह मान के किसी एक पर ऐसा करने के लिए पर्याप्त है)

सूची , दूसरी ओर सह-संप्रदाय है, यही कारण है कि यह काम करता है ।

यह वास्तव में दुर्भाग्यपूर्ण है कि अधिक सटीक प्रकार कुछ अनुमान लगाया गया है, यह काफी असामान्य है कि आप some के रूप में जाना जाने वाला कुछ प्रकार चाहते हैं विकल्प के बजाय (या कोई भी ) नहीं।

संपादित करें क्षमा करें, ऐसा लगता है कि मुझे पूरी तरह से मिट गया, क्यों अलग है। सरणी संप्रदाय नहीं है, लेकिन अयोग्य है तो ऐसा लगता है कि सरणी [बी] नहीं होने पर सरणी [ए] , एक अक्षय [ए] होना चाहिए, तब सब कुछ चाहिए काम। यह ऐसा होगा, यदि अर्रे एक प्रकार की प्रतिबाधा थी ऐसा नहीं है, यह जेवीएम के साथ आता है, अक्षय को बढ़ाने के लिए नहीं बनाया जा सकता wrappedArray , जो एक अक्षय है, के लिए एक अप्रत्यक्ष रूपांतरण है।

जब आप val l = सूची (पंक्ति 1, पंक्ति 2) लिखते हैं, तो इस रूपांतरण को लागू करने का कोई कारण नहीं है। यह प्रकार की सूची जितनी ठीक हो सकती है। फिर यह तथ्य है कि सूची का संप्रदाय है (एक सूची [बी] एक सूची है [ए] अगर बी एक ए है) जब हम बी नहीं करते हैं, तो यह किक नहीं होगा, लेकिन ए को ए के लिए एक निहित रूपांतरण है।

दूसरी तरफ, जब आप वैल एल लिखते हैं: सूची [आइटरनीय [ए]] = सूची (एक्स, वाई) तो सूची (...) फ़ंक्शन को अयोग्य [ए] तर्कों की उम्मीद है, और इस बिंदु पर अंतर्निहित रूपांतरणों के लिए लग रहा है

अभी भी एक बग नहीं है, लेकिन मुझे लगता है की तुलना में पेचीदा। शायद आप

  वर्ग कंटेनर [टी एंड एलटी;% अटेरबल [विकल्प [कोई भी]]] (वैल पंक्तियाँ: इटेररेबल [टी]) कर सकते हैं    

Comments

Popular posts from this blog

mysql - BLOB/TEXT column 'value' used in key specification without a key length -

memcached - Django cache performance -