वास्तव में क्या विधि पैरामीटर की घोषणा का अर्थ है:समारोह पैरामीटर प्रकार और =>
def myFunc(param: => Int) = param
=>
ऊपरी परिभाषा का अर्थ क्या है?
वास्तव में क्या विधि पैरामीटर की घोषणा का अर्थ है:समारोह पैरामीटर प्रकार और =>
def myFunc(param: => Int) = param
=>
ऊपरी परिभाषा का अर्थ क्या है?
यह तथाकथित पास-बाय-नाम है। इसका मतलब है कि आप एक ऐसे कार्य को पार कर रहे हैं जो Int
लौटाएगा लेकिन ज्यादातर पैरामीटर के आलसी मूल्यांकन को लागू करने के लिए उपयोग किया जाता है। यह कुछ हद तक समान है:
def myFunc(param:() => Int) = param
यहां एक उदाहरण है।
def eagerEval(x: Int) = { println("eager"); x; }
def lazyEval(x: => Int) = { println("lazy"); x; }
अब निष्पादित उन दोनों answer
का उपयोग कर:
def answer = { println("answer"); 40 }
और दो काम करता है, एक Int
द्वारा नामInt
और एक विकेट लेने: एक answer
समारोह कुछ Int
मूल्य लौटने पर विचार करें
eagerEval(answer + 2)
> answer
> eager
lazyEval(answer + 2)
> lazy
> answer
पहला मामला ओबीवी है ous: eagerEval()
answer
पर कॉल करने से पहले मूल्यांकन किया जाता है और "answer"
स्ट्रिंग प्रिंट करता है। दूसरा मामला बहुत दिलचस्प है। हम वास्तव में lazyEval()
पर फ़ंक्शन पास कर रहे हैं। lazyEval
पहले प्रिंट "lazy"
और x
पैरामीटर का मूल्यांकन करता है (वास्तव में, पैरामीटर के रूप में पारित x
फ़ंक्शन को कॉल करता है)।
बस बनाने के लिए यकीन है कि एक जवाब उचित शब्द का उपयोग करता है है: स्काला भाषा विशिष्टता का उपयोग करता है अवधि कॉल-दर-नाम:
एक मान पैरामीटर का प्रकार =>, उदाहरण के लिए पूर्व-निर्धारित किया जा सकता है एक्स: => टी। का प्रकार इस तरह का पैरामीटर पैरामीटर रहित विधि प्रकार => टी है। यह इंगित करता है कि संबंधित तर्क का फ़ंक्शन एप्लिकेशन के बिंदु पर मूल्यांकन नहीं किया जाता है, लेकिन इसके बजाय फ़ंक्शन के भीतर प्रत्येक उपयोग पर मूल्यांकन किया जाता है। यही है, तर्क कॉल-बाय-नाम का उपयोग करके मूल्यांकन किया गया है।
की धारा 4.6.1 के ऊपर अंतर मैं के बीच मुठभेड़ टोमाज़ Nurkiewicz के जवाब देने के लिए जोड़ने के लिए,() => इंट और => इंट है नंगे ब्लॉक के साथ बुला कि दूसरे की अनुमति देता है :
scala> def myfunc(f :() => Int) = println("Evaluated: " + f)
myfunc: (f:() => Int)Unit
scala> def myfunc2(f : => Int) = println("Evaluated: " + f)
myfunc2: (f: => Int)Unit
scala> myfunc({1})
<console>:9: error: type mismatch;
found : Int(1)
required:() => Int
myfunc({1})
^
scala> myfunc2({1})
Evaluated: 1
भविष्य में [प्रतीक हाउंड] (http://symbolhound.com) का उपयोग करें। –
संभावित डुप्लिकेट [स्कैला - '=> कुछ टाइप' का क्या अर्थ है?] (Http: // stackoverflow।कॉम/प्रश्न/7225308/स्कैला-व्हाट-डू-सोमैटाइप-साधन) –
नहीं पता कि मुझे यह कैसे नहीं मिला ... सोचो मुझे अपने चश्मा बदलना चाहिए ... :) – PrimosK