Functional Programming Principles in Scalaの Collections の講義を聞いていると、次の例を見ました。
scala> val s = "Hello World"
scala> s.flatMap(c => ("." + c)) // prepend each element with a period
res5: String = .H.e.l.l.o. .W.o.r.l.d
では、なぜオーデルスキー氏がここで a を使わなかったのか気になりmap
ました。しかし、map を試してみると、予想とは異なる結果が得られました。
scala> s.map(c => ("." + c))
res8: scala.collection.immutable.IndexedSeq[String] = Vector(.H, .e, .l, .l, .o,
". ", .W, .o, .r, .l,
map
つまり、「シーケンス」内の各項目に関数を適用してから、新しい「シーケンス」を返すので、上記の呼び出しは文字列を返すことを期待していました。
ただし、 amap
ではなくflatmap
aを実行できList[String]
ます。
scala> val sList = s.toList
sList: List[Char] = List(H, e, l, l, o, , W, o, r, l, d)
scala> sList.map(c => "." + c)
res9: List[String] = List(.H, .e, .l, .l, .o, ". ", .W, .o, .r, .l, .d)
なぜ文字列IndexedSeq[String]
の呼び出しの戻り値の型だったのですか?map