2011-08-29 11 views
11

आज मैं पूछना चाहता हूं कि '=> कुछ टाइप' का क्या अर्थ है। मैंने इसे this article में उपयोग किया। यह 'अनुक्रमिक कॉम्बिनेटर' भाग में है।स्कैला - '=> कुछ टाइप' का क्या अर्थ है?

किसी भी उत्तर के लिए धन्यवाद!

उत्तर

10

इसका मतलब है कि कोड का एक ब्लॉक जिसे आप चला सकते हैं।

उदाहरण के लिए

तो:

scala> def doTwice(op: =>Unit) = {op; op} 
doTwice: (op: => Unit)Unit 

scala> doTwice({println("Hi")}) 
Hi 
Hi 

इस मामले में =>Unit{println("Hi")}

यहाँ "SomeType" है यूनिट है, क्योंकि println एक मूल्य का उत्पादन नहीं करता। अगर यह Int का उत्पादन करता है, तो यह =>Int होगा।

+1

ओह, मैं देखता हूं। धन्यवाद! यह मुझे स्कैला के बारे में नफरत है। इस तरह की चीजों को Google पर हास्यास्पद रूप से कठिन है :) अच्छे लोगों और स्टैक ओवरफ्लो के लिए भगवान का शुक्र है :) – Arg

+4

अच्छा उदाहरण। यहां, 'op' को नाम * पैरामीटर द्वारा * कॉल के रूप में संदर्भित किया जाता है (जैसा कि * मूल्य * के विपरीत है)। ध्यान दें कि यह 'doTwice (println ("हाय") लिखने के लिए समान रूप से अच्छी तरह से काम करेगा) '। जब आप स्कैला में कोई फ़ंक्शन कॉल करते हैं, तो सिंटैक्स यह इंगित नहीं करता है कि आप * name * या * value * द्वारा पैरामीटर पास कर रहे हैं या नहीं। –

+2

@Arg [SymbolHound] (http://symbolhound.com/) आपका मित्र है। –

2

यह केवल एक प्रकार का फ़ंक्शन मान है जो कोई पैरामीटर नहीं लेता है। ओवेन का उदाहरण अच्छा है, बस यह जान लें कि "ए => बी" एक पैरामीटर वाला फ़ंक्शन है जिसमें टाइप ए और "=> बी" के साथ रिटर्न-वैल्यू एक ऐसा फ़ंक्शन है जो कोई पैरामीटर और रिटर्न नहीं लेता है प्रकार बी

6

के साथ एक मान दो चीजों को इंगित करता है। सबसे पहले, उपसर्ग => की वजह से, यह इंगित करता है कि पैरामीटर by name पारित किया जाएगा। फिर, यह इंगित करता है कि पारित पैरामीटर का प्रकार SomeType होना चाहिए।

कुछ लोग दो को भंग करते हैं, सोचते हैं => SomeType एक प्रकार है - यह नहीं है। यह दो चीजों का संयोजन है: पैरामीटर मूल्यांकन रणनीति और पैरामीटर प्रकार।

तो, नाम से फोन पर संक्षिप्त विवरण, मामले में विकिपीडिया लिंक बातें स्पष्ट नहीं किया, अगर आप इस राशि:

def f[A](x: => A) = { x; x } 
f(some stuff) 

फिर स्काला इस तरह इस पर अमल होगा:

{ some stuff; some stuff } 

मूल्य से एक फोन पर, क्या होता है और अधिक इस तरह है:

val x = some stuff 
{ x; x } 

भी ध्यान दें कि पैरामीटर हमेशा मूल्य पर कॉल पर मूल्यांकन किया गया है, लेकिन केवल एक बार। नाम से कॉल पर, पैरामीटर कभी का मूल्यांकन नहीं किया जा सकता है (यदि यह if की गैर-निष्पादन शाखा पर है, उदाहरण के लिए), लेकिन कई बार मूल्यांकन किया जा सकता है।

+1

इस मामले में [ए] का प्रतिनिधित्व क्या करता है? मैंने इसे कई स्थानों पर देखा है, लेकिन अभी भी इसे –

+1

@elimence नहीं मिला यह एक _type पैरामीटर_ है। यह एक ऐसा प्रकार है जो उस बिंदु पर ज्ञात नहीं है जहां 'f' घोषित किया गया है, लेकिन बिंदु 'f' पर ज्ञात होगा। फ़ंक्शन 'f' सभी प्रकार के 'ए' के लिए मान्य है, और, इस मामले में,' ए' क्या हो सकता है इसके बारे में कोई प्रतिबंध नहीं है।मैं निचली सीमा को इंगित करने के लिए 'ए <: कुछ कंक्रीट टाइप' का उपयोग कर सकता था ('ए 'एक' कुछ कंक्रीट टाइप 'या उप प्रकार का होना चाहिए),' ए>: कुछ अन्य प्रकार '(' ए' 'कुछ अन्य प्रकार' का सुपरक्लास होना चाहिए) , साथ ही साथ संकेत मिलता है कि 'ए' कुछ अंतर्निहित पैरामीटर का हिस्सा होना चाहिए, जो 'ए' क्या हो सकता है पर मनमाने ढंग से सीमाएं उत्पन्न करता है। –

+0

धन्यवाद डैनियल, अब मिल गया –

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