scala - How can I alias a covariant generic type parameter -


निम्न कोड संकलित नहीं होता है (स्काला 2.11 में):

  केस वर्ग कोवेरियंटक्लास [ + आर] (मूल्य: आर) {प्रकार टी = आर डीएफ़ मिलते हैं: आर = मान} वस्तु मुख्य {डीईफ़ मुख्य (एजीआर: एरे [स्ट्रिंग]): यूनिट = {प्रिंट्लएन (कोवेरियंटक्लास [स्ट्रिंग] ("हैलो")। )}}  

त्रुटि संदेश है:

  त्रुटि: (4, 8) संप्रभु प्रकार आर अपरिवर्तनीय स्थिति में टाइप प्रकार आर प्रकार टी प्रकार में होता है टी = आर ^  

मैं एक सह प्रकार प्रकार पैरामीटर क्यों नहीं कह सकता? अगर मैं लाइन टाइप T = R को निकालता हूं, तो कोड को संकलित करता है और हैलो प्रिंट करता है, इसलिए उपनाम समस्या लगता है दुर्भाग्य से, इसका मतलब है कि मैं अधिक जटिल प्रकारों के लिए एक उपनाम नहीं बना सकता, उदाहरण के लिए, प्रकार टी = सूची [आर] या तो संकलित नहीं करता है, हालांकि सूची सह-संबंध है।

से:

एक प्रकार का दायां हाथ उपनाम हमेशा अपरिवर्तनीय स्थिति में होता है।

इसका अर्थ है कि आप उपनाम T नहीं बना सकते और दाईं ओर एक प्रकार का प्रकार R निर्दिष्ट कर सकते हैं -हाथ की तरफ। वही सूची [आर] पर लागू होता है, क्योंकि यह भी संप्रदाय है।

आप कर सकते हैं , हालांकि टाइप पैरामीटर के साथ एक प्रकार के उपनाम प्रदान करते हैं: < / P>

  केस वर्ग CovariantClass [+ R] (मान: आर) {प्रकार टी [+ आर] = सूची [आर] डीईएफ़ मिल: आर = मान}  
<पी > यदि आप खुद को टाइप पैरामीटर R उपनाम के लिए चाहते हैं, तो आपको शायद पहले स्थान पर कुछ और नाम देना चाहिए।


Comments

Popular posts from this blog

python - Strange behavior using PyQt4's 'pyqtSlot' decorator before another decorator -

c# - UnhandledExceptionMode.ThrowException for AppDomain.UnhandledException -

c# - Process.Kill() returns access denied -