Scala GenTraversableOnce[B]是数组[File]的父类型吗?
Scala GenTraversableOnce[B]是数组[File]的父类型吗?,scala,inheritance,Scala,Inheritance,flatMap的Def: def flatMap[B](f: (A) ⇒ GenTraversableOnce[B]): Array[B] 要在目录中创建文件的列表: def recursiveListFiles(f: File): Array[File] = { val these = f.listFiles these ++ these.filter(_.isDirectory).flatMap(f => recursiveListFiles(f)) } f
flatMap的Def
:
def flatMap[B](f: (A) ⇒ GenTraversableOnce[B]): Array[B]
要在目录中创建文件的列表
:
def recursiveListFiles(f: File): Array[File] = {
val these = f.listFiles
these ++ these.filter(_.isDirectory).flatMap(f => recursiveListFiles(f))
}
flatMap
接受函数参数,函数参数也接受参数并返回
键入GenTraversableOnce[B]
Array
&gentraversableone
之间存在一个层次结构的公共类型,如果没有链接,那么Array[File]
不应该是gentraversableone[B]
的有效类型
看着
Array
API:
GenTraversableOnce
API:
似乎没有链接?存在从到的隐式转换,它继承了
GenTraversableOnce
从ScalaDocs:
scala.Predef中存在两个隐式转换,它们经常
应用于数组:转换为scala.collection.mutable.ArrayOps
(如上例第4行所示)和转换为
scala.collection.mutable.WrappedArray(的子类型
scala.collection.Seq)。这两种类型都提供了许多标准
在Scala collections API中找到的操作
至于两者的区别:
与上定义的所有操作一样,到ArrayOps的转换是临时的
ArrayOps返回一个数组,而WrappedArray的转换是
永久性,因为所有操作都返回一个WrappedArray
如
数组的链接scaladoc所述:
scala.Predef中存在两个经常应用于数组的隐式转换:一个转换为scala.collection.mutable.ArrayOps(如上面示例的第4行所示)和一个转换为scala.collection.mutable.WrappedArray(scala.collection.Seq的子类型)
Array
不继承自GenTraversableOnce
,但在scala.Predef
中有一个从Array
到ArrayOps
的隐式转换。而且ArrayOps
确实继承自GenTraversableOnce