听听Scala中的函数式编程原理的集合讲座,我看到了这个例子:
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
Run Code Online (Sandbox Code Playgroud)
然后,我很好奇为什么奥德斯基先生没有在map这里使用.但是,当我尝试地图时,我得到的结果与我预期的不同.
scala> s.map(c => ("." + c))
res8: scala.collection.immutable.IndexedSeq[String] = Vector(.H, .e, .l, .l, .o,
". ", .W, .o, .r, .l,
Run Code Online (Sandbox Code Playgroud)
我期望上面的调用返回一个String,因为我正在处理map,即将函数应用于"序列"中的每个项目,然后返回一个新的"序列".
但是,我可以执行map而不是flatmap一个List[String]:
scala> val sList = s.toList
sList: List[Char] = List(H, e, l, l, o, , W, o, r, l, d)
scala> …Run Code Online (Sandbox Code Playgroud)