diff options
-rw-r--r-- | src/library/scala/collection/TraversableLike.scala | 10 | ||||
-rw-r--r-- | test/files/pos/scan.scala | 2 |
2 files changed, 8 insertions, 4 deletions
diff --git a/src/library/scala/collection/TraversableLike.scala b/src/library/scala/collection/TraversableLike.scala index 9d65e2c224..5ef7b5205a 100644 --- a/src/library/scala/collection/TraversableLike.scala +++ b/src/library/scala/collection/TraversableLike.scala @@ -645,10 +645,14 @@ self => * @return collection with intermediate results */ def scanRight[B, That](z: B)(op: (A, B) => B)(implicit bf: CanBuildFrom[Repr, B, That]): That = { - val (_, b) = foldRight(z, bf(repr) += z) { (x, acc) => - val next = op(x, acc._1) - (next, acc._2 += next) + var lst = List(z) + foldRight(z) { (x, acc) => + val next = op(x, acc) + lst ::= next + next } + val b = bf(repr) + for (elem <- lst) b += elem b.result } diff --git a/test/files/pos/scan.scala b/test/files/pos/scan.scala index 98361b9167..a88abe63d2 100644 --- a/test/files/pos/scan.scala +++ b/test/files/pos/scan.scala @@ -8,7 +8,7 @@ object Test { val lst = List(1, 2, 3, 4, 5) assert(lst.scanLeft(0)(_ + _) == List(0, 1, 3, 6, 10, 15)) - assert(lst.scanRight(0)(_ + _) == List(0, 5, 9, 12, 14, 15)) + assert(lst.scanRight(0)(_ + _) == List(15, 14, 12, 9, 5, 0)) val emp = List[Int]() assert(emp.scanLeft(0)(_ + _) == List(0)) |