Scala:访问可选对象中的可选值

时间:2015-03-07 09:13:50

标签: scala error-handling optional forced-unwrapping unwrap

有没有一种方法可以访问Option对象中的Option Value? 嵌套的匹配情况会导致一个丑陋的树结构。

所以如果我有例如:

case class MyObject(value: Option[Int])
val optionObject : Option[MyObject] = Some(MyObject(Some(2))

我知道访问该值的唯一方法是:

val defaultCase = 0 //represents the value when either of the two is None
optionObject match {
    case Some(o) => o.value match {
        case Some(number) => number
        case None => defaultCase
    }
    case None => defaultCase
}

这非常难看,因为这个构造仅用于访问一个小的Option值。

我想做的是:

optionObject.value.getOrElse(0)

或者您可以使用Swift

if (val someVal = optionObject.value) {
   //if the value is something you can access it via someVal here
}

Scala中有什么东西能让我很好地处理这些事情吗?

谢谢!

1 个答案:

答案 0 :(得分:7)

flatMap将允许您映射选项并“展平”结果。因此,如果(并且仅当)外部和内部Option都是Some,您将获得一个Some,其中包含您的值。然后,您可以像对待任何其他getOrElse一样调用Option

optionObject.flatMap(_.value).getOrElse(0)