2012-09-28 44 views
9

क्या स्केला घोषणा नीचे का क्या मतलब है:क्या मतलब है 'MyType = इंट => बूलियन'

type MyType = Int => Boolean 

यहाँ मेरी समझ है:

मैं एक नए प्रकार 'MyType' घोषित रहा हूँ, लेकिन क्या उच्च आदेश समारोह का क्या मतलब है 'इंट => बूलियन'

+1

ध्यान दें कि 'इंट => Boolean' _not_ एक उच्च आदेश समारोह (टुकड़ा [Coursera के] की वजह से उपजी नहीं है, भले ही है (http://www.coursera.org/course/progfun) "सप्ताह 2: उच्च आदेश कार्य" असाइनमेंट ;-)) – netzwerg

+0

@netzwerg हाँ, ऐसा लगता है कि मुझे 'सरल' सामान भी मुश्किल लगता है। – user701254

+1

चिंता न करें, यह वास्तव में सरल है: उच्च आदेश फ़ंक्शन ऐसे कार्य होते हैं जो या तो उनके इनपुट पैरामीटर के रूप में एक और फ़ंक्शन लेते हैं, या किसी अन्य फ़ंक्शन को वापस/आउटपुट करते हैं ([विकिपीडिया] (http://en.wikipedia.org/wiki/Higher -order_function)) – netzwerg

उत्तर

14

यह नहीं इतना एक नए प्रकार उर्फ ​​ की घोषणा के रूप में एक नया प्रकार की घोषणा की है। वे अभी भी वही प्रकार हैं: लेकिन उपनाम आपको इसे थोड़ा और अधिक संक्षेप में लिखने देता है।

Int => Boolean एक ऐसा कार्य है जो एक तर्क, एक इंट लेता है, और एक बूलियन देता है।

उदाहरण के लिए, Int => Boolean हो सकता था "अधिक से अधिक से अधिक 5" की तरह एक समारोह:

type MyType = Int => Boolean 
val greaterThan5: MyType = (x: Int) => x > 5 
greaterThan5(7) // true 
3

आप सही हैं, निम्नलिखित compiles:

type MyType = Int => Boolean 
def positive(x: Int) = x > 0 
val fun: MyType = positive 
fun(42) //yields true 

यहाँ आप घोषित प्रकार उर्फ ​​कह रही है कि MyTypeInt ले रहे फ़ंक्शन के समतुल्य और Boolean लौटा रहा है। फिर आप इस तरह की घोषणा से मेल खाने वाली विधि बनाते हैं। अंत में आप MyType प्रकार के चर के लिए इस विधि को असाइन करते हैं। यह संकलित करता है और ठीक काम करता है।

ध्यान दें कि यह सिर्फ एक उर्फ ​​, नहीं एक नए प्रकार है:

trait MyType2 extends (Int => Boolean) 
val fun2: MyType2 = positive _ 
error: type mismatch; 
found : Int => Boolean 
required: MyType2 
     val fun2: MyType2 = positive _ 
         ^
संबंधित मुद्दे