加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何拆分Scala中填充了Options的Case Classes

发布时间:2020-12-16 08:51:11 所属栏目:安全 来源:网络整理
导读:我是 Scala的新手,我仍然习惯于习惯语法和风格,所以这可能是一个非常简单的问题. 我正在使用一个代码库,其中有很多用Options填充的case类,如下所示: case class Person( pants: Option[Pants])case class Pants( pocket: Option[Pocket])case class Pocket(
我是 Scala的新手,我仍然习惯于习惯语法和风格,所以这可能是一个非常简单的问题.

我正在使用一个代码库,其中有很多用Options填充的case类,如下所示:

case class Person(
  pants: Option[Pants]
)
case class Pants(
  pocket: Option[Pocket]
)
case class Pocket(
  cash: Option[Cash]
)
case class Cash(
  value: String = "zilch"
)

在上面的例子中,如果他们确实穿着裤子……带口袋,如果他们有任何钱,你会如何回报一个人的裤子口袋里有多少钱?

解决方法

for-comprehensions的好时光:

val someCash: Option[Cash] =
   for( pants  <- somePerson.pants;
        pocket <- pants.pocket;
        cash   <- pocket.cash ) yield cash

等效地,您可以编写以下内容,其中第一个代码是语法糖(忽略一些细微之处):

val someCash: Option[Cash] = 
   somePerson.pants.flatMap(_.pocket.flatMap(_.cash))

(我不完全确定你是否可以使用_通配符编写最后一个表达式,就像我做的那样).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读