Scala: доступ к необязательному значению в необязательном объекте
Есть ли хороший способ получить доступ к значению параметра внутри объекта параметра? Вложенные совпадения приводят к уродливой древовидной структуре.
Так что если у меня есть например:
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 ответ
flatMap
позволит вам отобразить опцию и "сгладить" результат. Так что если (и только если) внешнее и внутреннее Option
оба Some
, вы получите Some
с вашей ценностью в этом. Вы можете позвонить getOrElse
на нем, как вы бы сделали с любым другим Option
,
optionObject.flatMap(_.value).getOrElse(0)