反向实施Seq

时间:2013-04-14 18:55:15

标签: scala

在班级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
}

我不明白的是:Line(1-3)完成这项工作。但是为什么它会创建一个新的构建器然后添加元素来返回。 Just Line [1-3]就足够了

1 个答案:

答案 0 :(得分: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
}