2011-11-30 96 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'更好。 –

相關問題