我对Scala还是很陌生,但我仍在尝试适应语法和样式,因此这可能是一个非常简单的问题。
我正在使用一个代码库,其中有很多用Option填充的案例类,如下所示:
case class Person(
pants: Option[Pants]
)
case class Pants(
pocket: Option[Pocket]
)
case class Pocket(
cash: Option[Cash]
)
case class Cash(
value: String = "zilch"
)
在上面的示例中,如果他们确实穿着裤子……有口袋,并且根本没有钱,那么如何返回
Person
的Pants
Pocket
中有多少钱? 最佳答案
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))
(我不完全确定您是否可以像我一样使用
_
通配符编写最后一个表达式)。