如何在嵌套的case类中访问成员变量

时间:2018-06-05 21:00:20

标签: scala case-class

我有这段代码:

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情况。感谢。

1 个答案:

答案 0 :(得分:2)

如果其中一个OptionNone,则必须提供默认值才能返回。我们假设默认值为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}}立即 - 如果是这样,那就多余了。