「Option型=コレクション」と考えてみると、
 謎なのがmapとflatMapですの。
 結論から言うと、flatMapの挙動が斜め上なんですの。
 コード
 val list = List(List(1,2), List(1,2))
 val opt = Option(list)
 println(opt.flatMap(n => Option(n)))
 println(opt.map(n => n))
 結果
 Some(List(List(1, 2), List(1, 2)))
 Some(List(List(1, 2), List(1, 2)))
 なんとなく、flatMapなら「Some(List(1, 2, 1, 2))」となりそうなものですけど、mapの結果と一緒なのですの。
 Option型のmapとflatMapの違いはたぶん、関数の定義が微妙に違うだけなんですの。
 map   [B] (f: (A) ⇒ B    ): Option[B]
 flatMap [B] (f: (A) ⇒ Option[B]): Option[B]
 Scala API(*)の説明もこんな口ぶりですの。
 原文:Slightly different from map in that f is expected to return an Option (which could be None).
 意訳:fがOption(Noneの可能性も有り)を返すことになっているという点でmapとわずかに異なる
 その微妙な引数の差を、あえてmapとflatMapという名前で区別する意味がわかりませんの。ぷんすかぷん
 *)Optionのページ (2.9.1 final)
0 コメント:
コメントを投稿