2011-11-30 7 views
5

मैं एक Option है:स्कैला: क्या मैं एक विकल्प को varargs में परिवर्तित कर सकता हूं?

val myOption: Option[Int] = fooBar() 

और एक विधि है कि एक varargs परम लेता है:

def myMethod(a: String, b: Int*) = {...} 

वहाँ एक varargs परम के रूप में विधि करने के लिए विकल्प पारित करने के लिए कोई तरीका है? यानी यदि विकल्प Some(3) है तो 3 पास करें, और यदि यह None है तो कुछ भी पास न करें।

scala: How to pass an expanded list as varargs into a method? का जवाब के साथ प्रयोग मैं स्पष्ट रूप से तर्क टाइपिंग की कोशिश की:

myMethod("xyz", myOption: _*) 

लेकिन संकलक शिकायत है कि यह एक Seq[Int] की आवश्यकता है। ऐसा लगता है कि OptionSeq लागू नहीं करता है और कोई पूर्वनिर्धारित निहित रूपांतरण नहीं है।

यह देखते हुए कि संकलक Seq चाहता है, मैं निश्चित रूप से myOption.toList: _* पास कर सकता हूं, लेकिन क्या कोई अच्छा तरीका है?

+0

आपकी विधि को 'सेक' की क्या आवश्यकता है? यह संभव है कि आप इसे अधिक सामान्य संग्रह संचालन (यानी foreach, map, filter, आदि) के साथ लिख सकते हैं – schmmd

+0

@schmmd इस विशेष मामले में, 'myMethod' किसी तृतीय-पक्ष लाइब्रेरी का हिस्सा है, इसलिए मेरे पास उपयोग करने के अलावा कोई विकल्प नहीं है varargs। यह मेरा अपना कोड था, मैं शायद 'Int *' के बजाय 'Iterable [Int]' लेने के लिए विधि को फिर से लिखूंगा, और खुद को यह सारी परेशानी बचाऊंगा! –

उत्तर

5
myMethod("xyz", myOption.toSeq: _*) 
+1

क्या मैं यह सोचने में सही हूं कि यह 'विकल्प' ऑब्जेक्ट के 'निहित डीफ़ विकल्प 2 इटेबल' विधि के माध्यम से आंतरिक रूप से 'myOption.toList' को कॉल करेगा? –

+0

@ क्रिसिस ओच! आप बिल्कुल सही हैं ... हाँ, 'toList' बेहतर है। –