7

基本的に、オプション a、b などの束を抽出したいのですが、これは Scala でこれを行うための最良の方法ですか? 括弧内に for-yield があるのは、ちょっと混乱しているように見えます。

(for {
  a <- a
  b <- b
  c <- c
  ...
} yield {
  ...
}) getOrElse {
  ...
}
4

1 に答える 1

6

代わりにmapandを使用してみてください。flatMap次のクラス階層があるとします。

case class C(x: Int)
case class B(c: Option[C])
case class A(b: Option[B])

val a = Some(A(Some(B(Some(C(42))))))

抽出42するには、次のように言えます。

a.flatMap(_.b).flatMap(_.c).map(_.x).getOrElse(-1)

これは、次とほぼ同等です。

for(
  a <- a
  b <- a.b
  c <- b.c)
      yield c.x

それが返すことを除いてSome(42)。実際、内包表記は一連の/呼び出しforに変換されます。mapflatMap

于 2012-10-04T20:45:58.920 に答える