默认flatMap
:
def flatMap[B](f: (A) ⇒ GenTraversableOnce[B]): Array[B]
在目录中创建List
个文件:
def recursiveListFiles(f: File): Array[File] = {
val these = f.listFiles
these ++ these.filter(_.isDirectory).flatMap(f => recursiveListFiles(f))
}
flatMap
接受一个函数参数,该参数也接受一个参数并返回
输入GenTraversableOnce[B]
Array
&之间存在分层共同类型。 GenTraversableOnce
好像没有链接,Array[File]
不应该是GenTraversableOnce[B]
的有效类型?
看着
Array
API:http://www.scala-lang.org/api/2.10.4/#scala.Array
GenTraversableOnce
API:http://www.scala-lang.org/api/2.10.4/#scala.collection.GenTraversableOnce
似乎没有链接?
答案 0 :(得分:2)
从Array
到ArrayOps
的隐式转换,继承GenTraversableOnce
。
来自ScalaDocs:
scala.Predef中经常存在两个隐式转换 应用于数组:转换为scala.collection.mutable.ArrayOps (显示在上面例子的第4行)并转换为 scala.collection.mutable.WrappedArray(一个子类型 scala.collection.Seq)。两种类型都提供了许多标准 Scala集合API中的操作
至于两者之间的区别:
转换为ArrayOps是临时的,因为定义了所有操作 ArrayOps返回一个数组,而转换为WrappedArray则是 永久,因为所有操作都返回WrappedArray。
答案 1 :(得分:2)
如Array
的链接标量所述:
scala.Predef中存在两个经常应用于数组的隐式转换:转换为scala.collection.mutable.ArrayOps(显示在上面示例的第4行)和转换为scala.collection.mutable.WrappedArray( scala.collection.Seq的子类型。
Array
不会从GenTraversableOnce
继承,但Array
ArrayOps
scala.Predef
ArrayOps
隐式转换为GenTraversableOnce
{} {3}}。 {{1}}确实继承自{{1}}。