Why the following Scala code does not compile unless explicit type parameters are added? -
ऑब्जेक्ट टेस्ट अनुप्रयोग को विस्तारित करता है {// compiles: मानचित्र [int, value] (0 - & gt; ज्ञात टाइप (classOf) [ऑब्जेक्ट]), 1 - & gt; अज्ञातवेला ()) // संकलित नहीं करता है: मानचित्र (0 - & gt; ज्ञात टाइप (कक्षा [उद्देश्य]), 1 - & gt; अज्ञातवेल्व ())} सील विशेषता मान {डीआरटी टाइपटिप: विकल्प [वर्ग [_]] = कोई नहीं} मामला वर्ग ज्ञात टाइप (टाइप: वर्ग [_] [वर्ग [_]] = कोई नहीं} ]) मूल्य बढ़ाता है {def getType = कुछ (typ)}
संकलित करने के लिए ऊपर कोड विफल रहता है। कंपाइलर का त्रुटि संदेश है:
Experiment.scala: 10: त्रुटि: प्रकार बेमेल; पाया गया: (इंट, ज्ञात टाइप) की आवश्यकता: (इंट, उत्पाद के साथ मान {def getType: विकल्प [java.lang.Class [_ $ 2]]}) जहां प्रकार _ $ 2 0 -> ज्ञात टाइप (कक्षा [उद्देश्य]), ^ एक त्रुटि मिली
अगर मैं अज्ञातमान
के लिए def getType: विकल्प [वर्ग [_]] = कोई नहीं
की विधि घोषणापत्र बदलता हूं, तब भी मानचित्र ( ) टाइप मापदंडों के बिना।
क्यों?
हम्म, यह अजीब है मुझे एक बग की तरह दिखता है।
एक तरह से आप इसे ठीक कर सकते हैं वैल्यू getType के लिए एक डिफ़ॉल्ट मान दे, फिर केवल इसे ज्ञात टाइप में ओवरराइड कर रहा है। इस तरह से:
सील विशेषता मूल्य {def getType: विकल्प [वर्ग [_]] = कोई नहीं} केस ऑब्जेक्ट अज्ञातवैल्यू मूल्य केस वर्ग ज्ञात टाइप (टाइप: कक्षा [_]) मूल्य {ओवरराइड बढ़ाता है Def getType = कुछ (टाइप करें)}
लेकिन यह संदेह से दिखता है कि आप विकल्प को फिर से खोज रहे हैं। मैं वैल्यू टाइप पूरी तरह से छोड़ देता हूं, और बस सीधे विकल्प का उपयोग करता हूं।
मानचित्र (0 - & gt; कुछ (classOf [वस्तु]), 1 - & gt; कोई नहीं)
< / Pre>अगर आप इन मानचित्रों में से एक की अपेक्षा करते हैं, तो आप हर बार टाइपिंग ऑप्शन [क्लास [_]] पसंद नहीं करते हैं, तो आप इसके लिए एक उपनाम बना सकते हैं:
type value = विकल्प [वर्ग [_]]
Comments
Post a Comment