2011-11-30 1 views
5

私はOptionを持っている:Scala:Optionをvarargsに変換できますか?

val myOption: Option[Int] = fooBar() 

そして、可変引数のparamを取る方法:

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

は、可変引数のparamとしてメソッドにオプションを渡す方法はありますか?すなわち、オプションがSome(3)であれば3を渡し、それがNoneならば何も渡さない。

myMethod("xyz", myOption: _*) 

しかし、コンパイラは、それはSeq[Int]を必要と文句を言い:私は明示的に引数を入力しようとした scala: How to pass an expanded list as varargs into a method?への答えを試す

OptionSeqを実装しておらず、暗黙の暗黙の変換はありません。

コンパイラがSeqを望んでいるとすれば、私はもちろんmyOption.toList: _*を渡すことができますが、より良い方法がありますか?

+0

あなたのメソッドはどのような 'Seq'を必要としますか? – schmmd

+0

@schmmdこの特定のケースでは、 'myMethod'はサードパーティ製のライブラリの一部ですので、私は選択肢がありませんが、使用することはできません。(例えばforeach、map、filterなど) varargs。それは私自身のコードだったので、おそらく 'Int *'の代わりに 'Iterable [Int]'メソッドを書き直して、この問題をすべて解消するでしょう! –

答えて

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

これは、 'option'オブジェクトの'暗黙のdef option2Iterable'メソッドを介して 'myOption.toList'を内部的に呼び出すと思いますか? –

+0

@ChrisBおっと!あなたは絶対に正しいです...はい、 'toList'が良いです。 –

関連する問題