diff options
author | Aleksandar Prokopec <aleksandar@aleksandar-Latitude-E6500.(none)> | 2012-05-01 17:12:01 +0200 |
---|---|---|
committer | Aleksandar Prokopec <aleksandar@aleksandar-Latitude-E6500.(none)> | 2012-05-01 17:12:01 +0200 |
commit | 187817b7969aecfcec68dfc910c5a01e57d8edc4 (patch) | |
tree | d44619bc1340ec144855414b03dac72b044a217a /src/library/scala/collection/Iterator.scala | |
parent | 5f29da78e954d93e5bc8b878565de8c2a2abe561 (diff) | |
download | scala-187817b7969aecfcec68dfc910c5a01e57d8edc4.tar.gz scala-187817b7969aecfcec68dfc910c5a01e57d8edc4.tar.bz2 scala-187817b7969aecfcec68dfc910c5a01e57d8edc4.zip |
Refactor OnceCanBuildFrom to check the collection type.
The builder is now instantiated as an iterator builder only
if a generic builder cannot be found on the collection that
requested the builder.
Reason - we want this behaviour:
scala> scala.util.Random.shuffle(List(1, 2, 3): collection.TraversableOnce[Int])
res0: scala.collection.TraversableOnce[Int] = List(3, 1, 2)
instead of this one:
scala> scala.util.Random.shuffle(List(1, 2, 3): collection.TraversableOnce[Int])
res0: scala.collection.TraversableOnce[Int] = non-empty iterator
which may lead to nasty surprises.
Alternately, to avoid pattern-matching in OnceCanBuildFrom.apply, we
could mix in GenericTraversableTemplate-related functionaly into
TraversableOnce, but this may become too complicated.
Diffstat (limited to 'src/library/scala/collection/Iterator.scala')
-rw-r--r-- | src/library/scala/collection/Iterator.scala | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/library/scala/collection/Iterator.scala b/src/library/scala/collection/Iterator.scala index af83291a46..3b2a7c7820 100644 --- a/src/library/scala/collection/Iterator.scala +++ b/src/library/scala/collection/Iterator.scala @@ -26,7 +26,8 @@ object Iterator { * See `scala.util.Random.shuffle` for an example. */ implicit def IteratorCanBuildFrom[A] = new TraversableOnce.BufferedCanBuildFrom[A, Iterator] { - def toColl[B](coll: ArrayBuffer[B]) = coll.iterator + def bufferToColl[B](coll: ArrayBuffer[B]) = coll.iterator + def traversableToColl[B](t: GenTraversable[B]) = t.toIterator } /** The iterator which produces no values. */ |