2015-09-08 6 views
6

में अस्तित्व प्रकार के लिए मैं स्काला में अस्तित्व प्रकार के बारे में एक ब्लॉग को पढ़ लिया है: Existential types in Scalaअंडरस्कोर स्काला

इस ब्लॉग में, यह एक उदाहरण का उल्लेख है:

Map[Class[T forSome { type T}], String] 
Map[Class[T] forSome { type T}, String] 
Map[Class[T], String] forSome { type T} 

उनका स्पष्टीकरण। "तीसरा एक नक्शा प्रकारों का सुपरटेप है जैसे कि कुछ टी हैं जैसे कि वे एक मानचित्र [कक्षा [टी], स्ट्रिंग] हैं। तो फिर, हमारे पास मानचित्र में चाबियों के लिए कुछ निश्चित वर्ग प्रकार हैं - यह है बस इस बार हम नहीं जानते कि यह किस प्रकार का है। मध्य में हालांकि क्लास [टी] के लिए कुछ प्रकार {प्रकार टी} हैं। यही है, इसकी चाबियाँ कक्षाएं हैं जिन्हें उनके लिए कोई वैल्यू चाहिए टाइप पैरामीटर। तो यह वही है जो हम वास्तव में चाहते थे। "

स्पष्टीकरण का पालन करना आसान नहीं है। कोड उदाहरण में दूसरे और तीसरे के बीच अंतर क्या हैं? क्या कोई हमें कुछ उदाहरण दे सकता है?

ब्लॉग यह भी उल्लेख करता है कि Map[Class[_], String] उदाहरण में तीसरे एक के बराबर है, जब हम वास्तव में दूसरा चाहते हैं। क्या हम अस्तित्व के प्रकार के लिए _ का उपयोग करते समय अर्थशास्त्र को प्रभावित करेंगे?

उत्तर

5

कोड उदाहरण में दूसरे और तीसरे के बीच अंतर क्या हैं?

तीसरे प्रकार में आप अलग अलग T, उदा प्रकार Class[T] के दो चाबियाँ नहीं हो सकता Map(classOf[Object] -> "Object", classOf[String] -> "String") में इस प्रकार नहीं है (लेकिन इसमें दूसरा प्रकार है)।

ब्लॉग यह भी उल्लेख करता है कि Map[Class[_], String] उदाहरण में तीसरे एक के बराबर है, जब हम वास्तव में दूसरा चाहते हैं।

पोस्ट का उल्लेख है कि भविष्य में इसे बदला जा सकता है, और इसके पास है। अब यह दूसरे के बराबर है। Scala Specification में इस उदाहरण देखें:

प्रकार List[List[_]] अस्तित्व प्रकार List[List[t] forSome { type t }] के बराबर है।

क्या यह अस्तित्व को प्रभावित करेगा जब हम अस्तित्व के प्रकार के लिए _ का उपयोग करेंगे?

यह आपके विशिष्ट मामले में आप जो चाहते हैं उस पर निर्भर करता है। _ का उपयोग करें यदि यह आपके इच्छित प्रकार (ऊपर दिए गए विनिर्देश के अनुसार) देता है और आपको लगता है कि यह forSome फ़ॉर्म से अधिक पठनीय है; अन्यथा forSome का उपयोग करें।