2011-05-29 42 views
7

我是一位很強大的Java開發人員,他最近開始嘗試在空閒時間拿起Scala。我正在瀏覽scala-lang.org上的Scala by Example PDF,並且很困惑第一個例子中的Quick Sort如何工作。這裏是代碼:scala.Array是一個Seq?

object QuickSort extends App { 

    def sort(input: Array[Int]): Array[Int] = { 
    if(input.length <= 1) input 
    else 
    { 
     val pivot = input(input.length/2) 
     Array.concat(
      sort(input filter (pivot >)), 
       input filter (pivot ==), 
      sort(input filter (pivot <)) 
    ) 
    } 
    } 

    sort(Array(5, 4, 3, 2, 1)) foreach println 
} 

我的問題是不與語法或任何東西,但我很困惑與過濾函數來自何處。根據PDF,它表示它來自Seq [T]類,並且所有陣列都是Seq [T]的實例。這一切都很好,很棒,在閱讀PDF時我很滿意,並且很高興新手Scala開發人員。但後來我挖得更深一點,開始考慮scaladoc for Array[T]以及Array [T]的源代碼,但我沒有看到Array [T]類如何擴展或繼承Seq [T]特性。我錯過了什麼?

回答

9

您缺少隱含信息。在堆棧溢出上有關於implicitsfewquestions。在您正在閱讀的PDF上,請參閱從第113頁開始的第15章。在Scaladoc上,您將在對象scala.Predef上看到相關含義 - 只需查找以Array作爲輸入參數並返回其他內容的隱式方法。

PS:哎呀,它說ArraySeq!實際上,在Scala 2.8之前可能會出現這種情況,但從那時開始,Array就是Java Array,純粹而簡單。

相關問題