2013-04-14 64 views
3

在類SeqLike.scala中有一個稱爲reverse的功能,它顛倒了一個序列。例如,它使得List(1,2,3,4)到`名單(4,3,2,1)反向實施Seq

在源,描述是:

def reverse: Repr = { 
var xs: List[A] = List() //Line 1 
for (x <- this) 
    xs = x :: xs 
val b = newBuilder ////Line 4 
b.sizeHint(this) 
for (x <- xs) 
    b += x 
b.result 
} 

我不明白,是:行(1-3)不工作。但爲什麼它會創建一個新的構建器,然後向其添加元素以返回。 Just Line [1-3]就足夠了

回答

6

第1-3行生成List。但reverse不應該返回任何舊的Seq,但它是相同類型的Seq。所以如果它實際上是一個列表,它不需要額外的構建器步驟;否則它。 (如果你看看執行List,它不會做額外的工作。)

override def reverse: List[A] = { 
    var result: List[A] = Nil 
    var these = this 
    while (!these.isEmpty) { 
    result = these.head :: result 
    these = these.tail 
    } 
    result 
}