scalaのforはflatMapやmap相当らしい
val map = Map("a" -> 1, "b" -> 2) map.get("a").flatMap(a => map.get("b").map(b => { a + b }) ) map.get("a").flatMap(a => map.get("c").map(c => { a + c }) ) map.get("c").flatMap(c => map.get("b").map(b => { b + c }) )
上記のコードは以下のコードと等価らしい。
val map = Map("a" -> 1, "b" -> 2) for { a <- map.get("a") b <- map.get("b") } yield a + b for { a <- map.get("a") c <- map.get("c") } yield a + c for { c <- map.get("c") b <- map.get("b") } yield c + b
上の例では、一番最初だけ Some(3)
を返しあとは None
を返す。
これは便利だなぁ