2011-11-10 9 views
10

Option [String]があり、そこにSome(文字列)がある場合、それをIntto toToIntに変換したいとします。私は次のようにします:ScalaのOption [T]をOption [U]に変換する

val foo: Option[String] = Some("5") 
val baz: Option[Int] = foo match { 
    case Some(thing) => Some(thing.toInt) 
    case None => None 
} 

これは素晴らしいです。しかし、それは非常に冗長で多くの作業のようです。誰も私にこれを行う簡単な方法を示すことができますか?

ありがとう!

+0

この機能を抽象化することができます:

http://www.scala-lang.org/api/rc/scala/Option.html

はまた、このチートシートを参考にすることができ:ちょうどscaladocを見て、それが呼ばれています'Functor'。ファンクタ型のクラスは、List、Tree、Optionなどのそれぞれのインスタンスで動作します。型クラスに基づくアプローチで使用することは、非常に強力なコンセプトです。 – AndreasScheinert

答えて

16

はあなたがmapに必要なようだ:

val baz = foo map (_ toInt) 

Optionタイプのサポート多くのコレクション操作(のようなmapfilter、など)との素敵な便利な機能がたくさん。

http://blog.tmorris.net/scalaoption-cheat-sheet/

10

必要なのですfoo.map(_.toInt)