2011-11-30 98 views
5

我有一个OptionScala:我可以将选项转换为可变参数吗?

val myOption: Option[Int] = fooBar() 

而这需要一个可变参数PARAM的方法:

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

有什么办法打发选项的方法作为可变参数PARAM?即如果选项是Some(3)则传递3,如果是None,则不传递任何内容。

的答案试验,以 scala: How to pass an expanded list as varargs into a method?我试着输入明确的说法:

myMethod("xyz", myOption: _*) 

但编译器抱怨说,它需要一个Seq[Int]。看起来Option没有实现Seq,并且没有预定义的隐式转换。

鉴于编译器想要一个Seq,我当然可以通过myOption.toList: _*,但是有没有更好的方法?

+0

你的方法需要什么'Seq'?有可能你可以用更普遍的收集操作(比如foreach,地图,过滤器等)编写它。 – schmmd

+0

@schmmd在这种特殊情况下,'myMethod'是第三方库的一部分,所以我别无选择,只能使用可变参数。它是我自己的代码,我可能会重写这个方法来取代'Int *'而不是'Int *',并保存所有这些麻烦! –

回答

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

我是否认为这会通过'Option'对象的'implicit def option2Iterable'方法在内部调用'myOption.toList'? –

+0

@ChrisB Ouch!你是对的......是的,'toList'更好。 –

相关问题