2011-08-05 15 views
62

में क्या मतलब है मैं स्कैला के लिए नया हूं और मुझे वास्तव में यह पसंद है, लेकिन कभी-कभी यह मुझे आश्चर्यचकित करता है। उदाहरण के लिए:=> और() => स्केल

clickedCallbacks: List[() => Unit]) 

किसी को भी मुझे बता सकते हैं क्या => और () => स्काला में क्या मतलब है?

+0

कृपया इस ब्लॉग पोस्ट को जांचें "[मुझे लगता है कि कुछ प्रतीक का अर्थ क्या है या करता है?] (Http://docs.scala-lang.org/tutorials/FAQ/finding-symbols.html)" – Sun

उत्तर

95

=> कार्यों के उदाहरण बनाने के लिए वाक्य रचनात्मक चीनी है। याद रखें कि स्कैला में हर समारोह एक वर्ग का एक उदाहरण है।

उदाहरण के लिए, Int => String, प्रकार Function1[Int,String] अर्थात एक समारोह है कि प्रकार Int का एक तर्क लेता है और एक String रिटर्न के बराबर है।

scala> val f: Function1[Int,String] = myInt => "my int: "+myInt.toString 
    f: (Int) => String = <function1> 

    scala> f(0) 
    res0: String = my int: 0 

    scala> val f2: Int => String = myInt => "my int v2: "+myInt.toString 
    f2: (Int) => String = <function1> 

    scala> f2(1) 
    res1: String = my int v2: 1 

यहाँ myIntf और f2 के लिए पारित तर्क मूल्य से आबद्ध है।

() => T ऐसे फ़ंक्शन का प्रकार है जो कोई तर्क नहीं लेता है और T देता है। यह Function0[T] के बराबर है। () को मेरा मानना ​​शून्य पैरामीटर सूची कहा जाता है।

scala> val f:() => Unit =() => { println("x")} 
f:() => Unit = <function0> 

scala> f() 
x 

scala> val f2: Function0[Unit] =() => println("x2") 
f:() => Unit = <function0> 

scala> f2() 
x2 
5

=> "समारोह तीर" है। यह फ़ंक्शन प्रकार हस्ताक्षरों के साथ-साथ अनाम कार्य शर्तों दोनों में भी प्रयोग किया जाता है। () => UnitFunction0[Unit] के लिए एक शॉर्टेंड है, जो कि उन कार्यों का प्रकार है जो कोई तर्क नहीं लेते हैं और कुछ भी उपयोगी नहीं करते हैं (जैसे void अन्य भाषाओं में)।

13

() => Unit का अर्थ है: "प्रकार समारोह है कि वापस जाने के लिए कुछ भी नहीं कोई पैरामीटर लेता है और"

तो अगर आप एक मूल्य f घोषित एक समारोह है कि कोई पैरामीटर लेता है होना करने के लिए और कुछ भी नहीं देता है अपनी तरह होगा:

val f :() => Unit 

इस के बाद से एक val आप एक मूल्य निर्दिष्ट करने के लिए है, एक समारोह है कि प्रिंट Hola mundo

val f :() => Unit =() => println("Hola Mundo") 
है उदाहरण के लिए

पढ़ता है यही कारण है कि: * "च एक समारोह है कि स्काला में के बाद से वापस आती है कोई पैरामीटर लेता है और कोड println("Hola Mundo")

साथ प्रारंभ कुछ भी नहीं आप प्रकार निष्कर्ष उपयोग कर सकते हैं प्रकार की घोषणा करने के तो निम्नलिखित होगा आप नहीं है बराबर:

f() 

>"Hola mundo" 

या, के बाद से कार्य भी कर रहे हैं वस्तुओं आप apply आह्वान कर सकते हैं:

val f =() => println("Hola Mundo") 

यह आह्वान करने के लिए तुम सिर्फ कर सकते हैं विधि:

f.apply() 
> "Hola Mundo" 

है यही कारण है कि अपने घोषणा में आप कह रहे हैं इसलिए सूची "मैं एक सूची है कि और कोई पैरामीटर वाला कार्यों कोई वापसी प्रकार का आयोजन करेगा होगा" [() => यूनिट]

मुझे आशा है कि इससे मदद मिलती है।

73

=> स्कैला में कई अर्थ हैं, जो इसके गणितीय अर्थ से संबंधित हैं।

  • एक मूल्य के अलावा, यह एक समारोह शाब्दिक, या लैम्ब्डा परिचय देता है। जैसे List(1,2,3).map { (x: Int) => x * 2 }

  • में घुंघराले ब्रेसिज़ के अंदर सा एक प्रकार में, तीर (जैसे A => T, (A,B) => T, (A,B,C) => T, आदि) के दोनों किनारों पर प्रतीकों के साथ यह एक समारोह है कि के मापदंडों लेता Function<n>[A[,B,...],T] के लिए चीनी है, कि है, A[,B...] टाइप करें, और T टाइप करें।

    • बाएं हाथ की ओर (जैसे () => T) से संकेत मिलता है समारोह कोई पैरामीटर (भी कभी कभी कहा जाता है एक "thunk") लेता है उस पर खाली कोष्ठक;

    • दाहिने हाथ की ओर खाली कोष्ठक निरूपित है कि यह रिटर्न () — प्रकार Unit, के एकमात्र मूल्य जिसका नाम भी () — अभी तक उलझन में लिखा जा सकता है? :)

      यूनिट लौटने वाला एक कार्य प्रक्रिया के रूप में भी जाना जाता है, आमतौर पर एक विधि जिसे केवल इसके दुष्प्रभाव के लिए बुलाया जाता है।

  • एक विधि या समारोह पैरामीटर के लिए प्रकार घोषणा में, बाएं हाथ की ओर कोई प्रतीक (जैसे def f(param: => T)) यह एक "द्वारा नाम पैरामीटर" है, जिसका अर्थ है कि हर बार जब यह अंदर प्रयोग किया जाता है मूल्यांकन किया जाता है के साथ समारोह का शरीर, और पहले नहीं। सामान्य "बाय-वैल्यू" पैरामीटर का मूल्यांकन फ़ंक्शन/विधि में प्रवेश से पहले किया जाता है।

  • case खंड में, वे परिणाम अभिव्यक्ति से पैटर्न (और वैकल्पिक गार्ड) को अलग करते हैं, उदा। case x => y

+0

धन्यवाद, मैं "उप-नाम पैरामीटर" अर्थ की तलाश में था, जिसका अर्थ किसी अन्य उत्तर में नहीं है। इसका उपयोग तब किया जाता है जब "आलसी मूल्यांकन" की आवश्यकता होती है। – jp48

3

सबसे सरल जवाब के रूप में, आप स्थानापन्न कर सकते हैं जो कुछ भी शब्द "वाम" और जो कुछ के साथ => के बाएँ हाथ की तरफ है शब्द "सही" के साथ दाएँ हाथ की ओर पर है।

फिर, के अर्थ "वाम => सही" हो जाता है:

वाम लो तो सही है।

इसका मतलब है कि यदि आपके पास "() =>" है कि आप कुछ भी नहीं ले सकते (यानी, कोई पैरामीटर नहीं) और फिर दाएं हाथ पर जो कुछ भी हो।

यह सबसे आम अर्थ है।

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