2012-05-08 12 views

उत्तर

5

यह नहीं होना चाहिए।

आप मूल्यों और कार्यों के साथ एक समानता बना सकते हैं। आपके पास बुनियादी मान हैं, जो कार्य नहीं हैं, जैसे कि 5 और "foo"। आपके पास सरल कार्य होते हैं, जो सरल मूल्यों को तर्क के रूप में लेते हैं और + या length जैसे सरल मान वापस लेते हैं। उच्च क्रम कार्य ऐसे कार्य होते हैं जिनमें पैरामीटर या परिणाम के रूप में अन्य कार्य होते हैं। उदाहरण के लिए takeWhile, map, या foldLeft उच्च आदेश फ़ंक्शन हैं।

आप प्रकारों पर विचार करते हैं, तो सरल प्रकार, जो मूल्यों की वास्तविक प्रकार के होते हैं, इस तरह के रूप Int, String कर रहे हैं, या यहां तक ​​कि Int => String और सूची [डबल] (अब मैं कार्यों सहित हर मूल्यों, सरल या नहीं करने पर विचार,) । फिर पैरामीटर प्रकार होते हैं, जिन्हें टाइप कन्स्ट्रक्टर भी कहा जा सकता है (उन्हें टाइप फ़ंक्शन कॉल करना समानता को स्पष्ट करेगा)। सूची (सामान्य पैरामीटर को instanciating के बिना) वास्तव में मूल्यों के लिए एक प्रकार नहीं है, आप केवल List टाइप करने के लिए एक वैल घोषित नहीं कर सकते हैं, यह List[Something] होना चाहिए। इसलिए सूची को एक ऐसे कार्य के रूप में माना जा सकता है जो एक साधारण प्रकार (इंट कहते हैं) दिया जाता है, एक और सरल प्रकार (सूची [Int]) देता है। Int, String, और Double और Int => स्ट्रिंग को प्रकार*, जबकि List में * -> * है। पैरामीट्रिक प्रकार जैसे List या Map सरल कार्यों के समान हैं।

जैसे ही उच्च ऑर्डर फ़ंक्शन फ़ंक्शन (सरल मान के बजाय) पैरामीटर के साथ एक फ़ंक्शन होता है, एक उच्च ऑर्डर प्रकार (या कभी-कभी उच्च प्रकार का) एक प्रकार होता है जिसमें सरल प्रकार पैरामीटर के बजाय एक प्रकार का कन्स्ट्रक्टर पैरामीटर होता है। यह दयालु (* -> *) -> * है, या कुछ और जटिल है। उन्हें HigherOrder[C[_]], या HigherOrder[C[X]] के साथ घोषित किया गया है, यह बताएं कि टाइप पैरामीटर, C, स्वयं एक पैरामीट्रिक प्रकार है, या टाइप कन्स्ट्रक्टर है। ध्यान दें कि इसे प्रकार की घोषणा में दिखाना है, प्रकार तत्काल नहीं। List को List[A] पर घोषित किया गया है, इसलिए यह पैरामीट्रिक है, लेकिन उच्च आदेश नहीं है। यदि आप List[Seq[Map[Int, Set[Double]]] के साथ एक को instanciate, जो List आदेश किसी भी उच्च नहीं होगा। एक उच्च ऑर्डर प्रकार List (List[Int] के बजाय) को इसके पैरामीटर के रूप में स्वीकार करेगा, कोई val x : HigherOrder[List] = ... घोषित कर सकता है।

लाइब्रेरी में उच्च ऑर्डर प्रकार बहुत आम नहीं हैं, आप संग्रह पुस्तकालय के गोर विवरण में कुछ स्थान देख सकते हैं, जैसे GenericCompanion। आप उनमें से बहुत से स्केलज़ में पा सकते हैं।

9

आपके पास जो उच्च है, वह उच्च प्रकार का नहीं है, लेकिन इसे आसानी से संशोधित किया जा सकता है।

type MyMap2[A,B,C] = Map[A, List[Map[B, C]]] 

अब, हम MyMap फिर प्रकार पैरामीटर प्रदान करके बना सकते हैं।

type MyMap = MyMap2[String, Int, String] 

"उच्च-kinded" सिर्फ इतना है कि यह एक प्रकार है कि निर्जन है, और आदेश में एक से आवासीय प्रकार बनाने के लिए में अन्य प्रकार के साथ प्रदान की जाने की आवश्यकता है।

संबंधित मुद्दे