2015-02-07 15 views
-1

的DEF flatMap是GenTraversableOnce [B] Array [File]的父類型?

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之間的分層公用類型0 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

似乎沒有成爲一個鏈接?

回答

1

如上所述通過Array鏈接scaladoc:

兩個隱式轉換在scala.Predef存在被頻繁施加到陣列:一個轉換到scala.collection.mutable.ArrayOps(上線所示4),並轉換爲scala.collection.mutable.WrappedArray(scala.collection.Seq的子類型)。

Array不從GenTraversableOnce繼承,但沒有從ArrayArrayOpsscala.Predef看到herehere的隱式轉換。並且ArrayOps確實繼承自GenTraversableOnce

2

存在從ArrayArrayOps的隱式轉換,其繼承GenTraversableOnce

從ScalaDocs:

兩個隱式轉換存在於scala.Predef被頻繁施加到陣列 :一個轉換到scala.collection.mutable.ArrayOps (上文對實施例的4線所示)和轉換爲 scala.collection.mutable.WrappedArray( scala.collection.Seq的子類型)。這兩種類型的使許多可用的Scala集合API

至於兩者之間的差異中的標準 操作:

到ArrayOps轉換是暫時的,因爲所有的操作上 ArrayOps定義返回一個Array,而轉換爲WrappedArray的是 永久,因爲所有操作都返回一個WrappedArray。

相關問題