2011-10-02 15 views
69

मुझे पता है कि इस पर काफी कुछ सवाल किया गया है के लिए पैरामीटर प्रकार लापता है, लेकिन मैं एक साधारण उदाहरण है कि मैंने सोचा था कि काम करना चाहिए बना लिया है, लेकिन अभी भी नहीं है और मुझे यकीन है कि नहीं कर रहा हूँ मैं समझता हूं कि क्योंस्काला को रेखांकित - त्रुटि: विस्तार समारोह

val myStrings = new Array[String](3) 
// do some string initialization 

// this works 
myStrings.foreach(println(_)) 


// ERROR: missing parameter type for expanded function 
myStrings.foreach(println(_.toString)) 

कोई बता सकता है कि दूसरा कथन संकलित क्यों नहीं करता है?

+3

यहां तक ​​कि सरल: 'myStrings.foreach (println) ' –

उत्तर

90

यह फैलता करने के लिए:

myStrings.foreach(println(x => x.toString)) 

आप चाहते हैं:

myStrings.foreach(x => println(x.toString)) 

प्लेसहोल्डर वाक्य रचना गुमनाम कार्यों के लिए एक समारोह के साथ छोटी संभव युक्त अभिव्यक्ति बदल देता है।

+1

इसी प्रकार: http://stackoverflow.com/questions/5981732/scala-underscore-use-to-simplify-syntax-of-function-literals http: // stackoverflow.com/questions/5259006/underscore-in-named-arguments – retronym

+0

क्यों 'myStrings.foreach (println (_))' स्वचालित रूप से '' toString' println' के तर्क के लिए शामिल होते हैं? । –

+0

@Kevi मेरेडिथ println toString() जो भी की वस्तु पारित हो जाता है – krookedking