Scala:访问可选对象中的可选值
Scala: Access optional value in optional object
有没有一种访问选项对象中的选项值的好方法?
嵌套的匹配案例导致丑陋的树结构。
所以如果我有例如:
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 中有什么东西可以让我很好地处理这些事情吗?
谢谢!
flatMap
将让您映射一个选项和 "flatten" 结果。因此,如果(且仅当)外部和内部 Option
都是 Some
,您将获得一个包含您的值的 Some
。然后,您可以像调用任何其他 Option
.
一样对其调用 getOrElse
optionObject.flatMap(_.value).getOrElse(0)
有没有一种访问选项对象中的选项值的好方法? 嵌套的匹配案例导致丑陋的树结构。
所以如果我有例如:
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 中有什么东西可以让我很好地处理这些事情吗?
谢谢!
flatMap
将让您映射一个选项和 "flatten" 结果。因此,如果(且仅当)外部和内部 Option
都是 Some
,您将获得一个包含您的值的 Some
。然后,您可以像调用任何其他 Option
.
getOrElse
optionObject.flatMap(_.value).getOrElse(0)