diff options
author | Aleksandar Pokopec <aleksandar.prokopec@epfl.ch> | 2010-03-16 13:10:45 +0000 |
---|---|---|
committer | Aleksandar Pokopec <aleksandar.prokopec@epfl.ch> | 2010-03-16 13:10:45 +0000 |
commit | 3bcd23488e84ef1af0ba77653e8c0d74bac846e6 (patch) | |
tree | 81353463843bd53d5c0d71c272d8dd7f1674d6f3 | |
parent | b61957e6f0c6313b29100fc0048e5c7bdd917e77 (diff) | |
download | scala-3bcd23488e84ef1af0ba77653e8c0d74bac846e6.tar.gz scala-3bcd23488e84ef1af0ba77653e8c0d74bac846e6.tar.bz2 scala-3bcd23488e84ef1af0ba77653e8c0d74bac846e6.zip |
Fixes #3091. Review by community.
-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)) |