def foo(x:Int, f:Unit=>Int) = println(f())
foo(2, {Unit => 3+4}
//case1
def loop:Int = 7
foo(2, loop) //does not compile
changing loop to
//case 2
def loop():Int = 7
foo(2, loop) // does not compile
changing loop to
//case 3
def loop(x:Unit): Int = 7 //changing according to Don's Comments
foo(2,loop) // compiles and works fine
केस 1 और केस 2 भी काम नहीं करना चाहिए? वे क्यों काम नहीं कर रहे हैं?तर्क के बिना कार्य, स्केल
को परिभाषित करने foo
def foo(x:Int, y:()=>Int)
फिर 2 काम करता है मामला नहीं बल्कि मामले के रूप में 1.
Arent वे सभी कार्य किसी भी तरह से परिभाषित करने के लिए काम करना चाहिए।
// मुझे लगता है कि() => int में foo एक खराब शैली है, y: => Int काम नहीं करता है, टिप्पणियां ??
def विधियों को परिभाषित करता है (जो प्रथम श्रेणी नहीं हैं), फ़ंक्शन नहीं (जो * प्रथम श्रेणी हैं)। आंशिक अनुप्रयोग जब आपको उनकी आवश्यकता होती है तो कार्य करने के तरीकों को ले जाती है। –
क्या आप विस्तृत कर सकते हैं .. मुझे यह नहीं मिला। क्या आपका मतलब था कि डीफ़ को पास नहीं किया जा सकता है। यानी उपरोक्त "लूप" अन्य कार्यों में पारित नहीं किया जा सकता है? – scout
सही। जब हम "प्रथम श्रेणी" कहते हैं, तो हम किसी भी अन्य मूल्य जैसे इंट, स्ट्रिंग या कुछ उपयोगकर्ता परिभाषित वर्ग के उदाहरण के समान स्थिति का मतलब रखते हैं। तरीकों से इस तरह से इलाज नहीं किया जा सकता है (उन्हें केवल बुलाया जा सकता है)। दूसरी ओर कार्य (जो फंक्शन एन (उपखंडों के उपखंड) के उदाहरण हैं (एन तर्कों की संख्या है), स्पष्ट कारण के लिए प्रथम श्रेणी की संस्थाएं हैं कि वे एक वर्ग के उदाहरण हैं। –