聆聽講座集合從Functional Programming Principles in Scala,我看到這個例子:地圖與FlatMap上串
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
然後,我很好奇,爲什麼Odersky的先生沒有使用map
這裏。但是,當我嘗試地圖時,我得到了與我預期不同的結果。
scala> s.map(c => ("." + c))
res8: scala.collection.immutable.IndexedSeq[String] = Vector(.H, .e, .l, .l, .o,
". ", .W, .o, .r, .l,
我預計,上述調用返回一個字符串,因爲我map
-ing,即應用功能,在每個項目「序列」,然後返回一個新的「順序」。
不過,我可以執行map
而不是flatmap
爲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)
爲什麼呼籲字符串map
的IndexedSeq[String]
返回類型?
(需要3步),因爲你不能將兩個字符放在單個字符類型中?而字符+字符是產生字符串類型的兩個字符。 –