我有这段代码:
case class L2JsonMapping(myTarget: Option[Int])
case class L1JsonMapping(l1: Option[L2JsonMapping])
case class JsonMapping(l0: Option[L1JsonMapping])
假设它们已被初始化。现在我应该如何在以下函数中将“myTarget”分配给“result”:
def function(in: JsonMapping): Int = {
val result = ?
...
}
请注意,我还需要处理Option情况。感谢。
答案 0 :(得分:2)
如果其中一个Option
为None
,则必须提供默认值才能返回。我们假设默认值为0
- 如果是,您可以使用:
def function(in: JsonMapping): Int = in.l0 // get Option[L1JsonMapping]
.flatMap(_.l1) // flatMap to get an Option[L2JsonMapping]
.flatMap(_.myTarget) // flatMap to get an Option[Int]
.getOrElse(0) // get value value or default
这使用Option.flatMap
中您可以阅读的myTarget
:
如果此scala.Option为非空,则返回将[给定函数] f应用于此scala.Option的值的结果。如果此scala.Option为空,则返回None。
注意,这只是返回 result
的值 - 我假设您将其分配给result
只是为了返回{ {1}}立即 - 如果是这样,那就多余了。