2011-08-29 6 views
7

यह काम करता हैकोई तर्क फ़ंक्शन के लिए स्कैला प्रकार को कैसे परिभाषित किया जाए?

def func(f: => Int) = f 

यह dosn't

type EmptyFunct = => Int 

या

type EmptyFunct = (=> Int) 

स्काला संस्करण (उदाहरण के लिए वर्ग के अंदर) 2.9 दो सवाल:

  1. दूसरे मामले में चीनी कार्य सिंटैक्स क्यों नहीं करते?
  2. सिंटैक्स चीनी के बिना इस फ़ंक्शन को कैसे परिभाषित किया जाए?
+0

आप 'EmptyFunct' के उपयोग पता चलता है कि क्यों'() => Unit' का एक उदाहरण दे सकते हैं:

तो चलो एक वर के साथ चलते हैं आपकी ज़रूरत के अनुरूप नहीं है? – Nicolas

उत्तर

12

=> इंट पैरामीटर के बिना बिल्कुल एक फ़ंक्शन नहीं है, यह नाम उत्तीर्ण होने वाले नाम से कॉल के साथ एक इंट तर्क है। (बेशक, यह एक बिंदु ठीक है, क्योंकि इसे पैरामीटर के बिना फ़ंक्शन पास करके कार्यान्वित किया जाता है)।

तर्क के बिना कार्य () => Int लिखा गया है। आप type EmptyFunct =() => Int कर सकते हैं।

यह एक प्रकार नहीं है। Func के अंदर, एफ एक int के रूप में टाइप किया जाएगा। प्रकार का एक तर्क() => Int नहीं होगा।

def func(f: => Int) = f *2 

func (: => Int) Int

लेकिन

def func(f:() => Int) : Int = f*2 

error: value * is not a member of() => Int

+0

तो कोई तर्क (: => यूनिट) फ़ंक्शंस का संग्रह बनाने का कोई तरीका नहीं है? – yura

+0

मेरी प्रतिक्रिया देखें: 'संग्रह [फंक्शन 0 [यूनिट]] ' – Nicolas

+0

यदि आप (: => यूनिट *) बार-बार तर्क की तलाश में थे, तो इसकी अनुमति नहीं है। दरअसल, यह केवल सीक [यूनिट] हो सकता है (सीईसी में मूल्य होते हैं, न कि सम्मेलन बुलाते तर्क)। और काफी बेकार हो। आप क्या चाहते हैं Seq [Function0 [यूनिट]] (या Seq [() => यूनिट], इसका मतलब एक ही बात है)। नोटेशन कम सुविधाजनक होगा:() => एक्स + = 1 x + = 1. –

3

आप Function0

का उपयोग करना चाहिए पहले मामले में, क्योंकि आप एक गैर तर्क समारोह की घोषणा यह काम नहीं करता है, लेकिन क्योंकि आप इंगित करता है कि पैरामीटर नाम से पुकारा जाता है।

+0

यह मेरी समस्या का समाधान नहीं है। क्योंकि Function0 वास्तव में प्रकार() => टी नहीं (=> टी) है जैसा कि मैंने कार्य नहीं किया है। – yura

0

मैं एक विधि में खास मतलब नहीं दिख रहा है, किसी पूर्णांक, कोई पैरामीटर के साथ लागू लौटने। या तो यह स्थिर रहता है, तो आप निरंतर उपयोग कर सकते हैं, या यह एक var का उपयोग करेगा?

var k = 10 
val fi = List (() => k * 2,() => k - 2) 
val n = fi(0) 
n.apply 
k = 11 
n.apply 

परिणाम 20 है, तो 22

+0

"मुझे किसी विधि में ज्यादा समझ नहीं आती है, एक int वापस लौटाता है, कोई पैरामीटर नहीं होता है।" एक काउंटर ? – Nicolas

+0

या किसी भी कॉलबैक फ़ंक्शन जिसका निर्माण चरण में इसके सभी संदर्भ हैं – yura

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

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