Преобразование опции [T] в опцию [U] в Scala

Предположим, что у нас есть Option [String], и если там есть (строка), мы хотим превратить его в Int в .toInt. Я бы сделал следующее:

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

Это отлично работает. Тем не менее, это кажется чрезвычайно многословным и, как много работы. Может ли кто-нибудь показать мне более простой способ сделать это?

Спасибо!

Ответ 1

Кажется, что вам нужно map:

val baz = foo map (_ toInt)

Option поддерживают многие операции сбора (например, map, filter и т.д.) и множество полезных полезных функций. Просто взгляните на scaladoc:

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

Также этот обманщик может быть полезен:

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

Ответ 2

Все, что вам нужно, это foo.map(_.toInt)