2011-06-15 10 views

उत्तर

11

हाँ, बहुत संभव:

>> def perform(functions:() => Unit*) = for (f <- functions) f() 
>> perform(() => println("hi"),() => println("bye"))  
hi 
bye 
perform: (functions:() => Unit*)Unit 

याद रखें कि बार-बार मापदंडों Seq[TheType] के रूप में संपर्क में हैं। इस मामले में, Seq[() => Unit], हालांकि यह दिखता है जैसे * की उच्च प्राथमिकता होनी चाहिए, लेकिन ऐसा नहीं है।

ध्यान दें कि कोष्ठक का उपयोग कर एक ही प्रकार की पैदावार:

>> def perform(functions:(() => Unit)*) = for (f <- functions) f() 
perform: (functions:() => Unit*)Unit 

मुबारक कोडिंग।

2

@pst ने आपको जवाब दिया, मैं बस भविष्य के संदर्भ के लिए एक और बिट जोड़ रहा हूं। आप आरईपीएल

में
perform(fcts) // this does not compile 

काम नहीं करेगा इस पर अमल करने का प्रयास करें

val fcts = List(() => println("I hate"),() => println("this")) 

:

के आप अपने आप को कार्यों की निम्न संग्रह के साथ लगता है मान लीजिए।

आप संकलक है कि क्या तुम सच में प्राप्त करने के लिए कोशिश कर रहे हैं एक जावा सरणी के रूप में पारित करने के लिए सूची

perform(fcts : _*) // works. 

जाहिर है (यह कैसे varargs बाईटकोड में प्रतिनिधित्व कर रहे हैं है) है, के लिए यह पकड़ बता सकते हैं लेकिन किसी भी स्कैला संग्रह, न सिर्फ सूची।

+0

रुबी में, हम तर्कों को "छेड़छाड़" कहते हैं। –

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