3

在类SeqLike.scala中有一个函数调用reverse它反转一个序列。例如它使List(1,2,3,4)`List(4,3,2,1)

在源代码中,描述是:

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)行完成了这项工作。但是为什么它会创建一个新的builder,然后向它添加元素以返回。只需 Line[1-3] 就足够了

4

1 回答 1

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
}
于 2013-04-14T18:59:39.513 回答