diff options
author | Aleksandar Pokopec <aleksandar.prokopec@epfl.ch> | 2010-06-16 16:40:02 +0000 |
---|---|---|
committer | Aleksandar Pokopec <aleksandar.prokopec@epfl.ch> | 2010-06-16 16:40:02 +0000 |
commit | 97bd54ecf38bd8c4a29e2aee655fdbf7c29b0dcd (patch) | |
tree | 103f54b31ea06682950ec62e848e91df73f5e3ee | |
parent | e3fd6b82e0c93874e676959d06ad81fd5df6fc23 (diff) | |
download | scala-97bd54ecf38bd8c4a29e2aee655fdbf7c29b0dcd.tar.gz scala-97bd54ecf38bd8c4a29e2aee655fdbf7c29b0dcd.tar.bz2 scala-97bd54ecf38bd8c4a29e2aee655fdbf7c29b0dcd.zip |
Fixes #3563. Review by extempore.
-rw-r--r-- | src/library/scala/collection/IterableLike.scala | 7 | ||||
-rw-r--r-- | src/library/scala/collection/TraversableOnce.scala | 10 | ||||
-rw-r--r-- | test/files/run/bug3563.scala | 21 |
3 files changed, 35 insertions, 3 deletions
diff --git a/src/library/scala/collection/IterableLike.scala b/src/library/scala/collection/IterableLike.scala index 5ae4677f4e..538fd09c0e 100644 --- a/src/library/scala/collection/IterableLike.scala +++ b/src/library/scala/collection/IterableLike.scala @@ -353,6 +353,13 @@ self => override /*TraversableLike*/ def toStream: Stream[A] = iterator.toStream + /** Converts this $coll to a sequence. + * + * $willNotTerminateInf + * @return a sequence containing all the elements of this $coll. + */ + override /*TraversableOnce*/ def toSeq: Seq[A] = toList + /** Method called from equality methods, so that user-defined subclasses can * refuse to be equal to other collections of the same kind. * @param that The object with which this $coll should be compared diff --git a/src/library/scala/collection/TraversableOnce.scala b/src/library/scala/collection/TraversableOnce.scala index 6bedf025d4..de4eb6fc22 100644 --- a/src/library/scala/collection/TraversableOnce.scala +++ b/src/library/scala/collection/TraversableOnce.scala @@ -399,15 +399,19 @@ trait TraversableOnce[+A] { def toList: List[A] = new ListBuffer[A] ++= self toList /** Converts this $coll to an iterable collection. Note that - * the choice of target Iterable must be lazy as this TraversableOnce - * may be lazy and unevaluated. + * the choice of target `Iterable` is lazy in this default implementation + * as this `TraversableOnce` may be lazy and unevaluated (i.e. it may + * be an iterator which is only traversable once). * * $willNotTerminateInf * @return an `Iterable` containing all elements of this $coll. */ def toIterable: Iterable[A] = toStream - /** Converts this $coll to a sequence. As with toIterable, it must be lazy. + /** Converts this $coll to a sequence. As with `toIterable`, it's lazy + * in this default implementation, as this `TraversableOnce` may be + * lazy and unevaluated. + * * $willNotTerminateInf * @return a sequence containing all elements of this $coll. */ diff --git a/test/files/run/bug3563.scala b/test/files/run/bug3563.scala new file mode 100644 index 0000000000..8abbb60803 --- /dev/null +++ b/test/files/run/bug3563.scala @@ -0,0 +1,21 @@ + + + + + +// ticket #3563 +object Test { + + def main(args: Array[String]) { + var sum = 0 + val setseq = Set(1, 2, 3, 4).toSeq + setseq.map( n => { sum += n; n * n }).head + assert(sum == 10) + + sum = 0 + val mapseq = Map(1 -> 1, 2 -> 2, 3 -> 3, 4 -> 4).toSeq + mapseq.map( n => { sum += n._1; (n._1 + n._1, n._2 * n._2) }).head + assert(sum == 10) + } + +} |