7

有没有一种访问选项对象内选项值的好方法?嵌套的匹配案例会导致丑陋的树结构。

因此,如果我有例如:

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中有什么东西可以让我很好地处理这些事情吗?

谢谢!

4

1 回答 1

8

flatMap将让您映射一个选项并“展平”结果。因此,如果(且仅当)外部和内部Option都是Some,您将获得Some具有您价值的 a 。然后,您可以像调用getOrElse其他任何Option.

optionObject.flatMap(_.value).getOrElse(0)
于 2015-03-07T09:18:01.927 回答