「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 コメント:
コメントを投稿