diff options
author | Adriaan Moors <adriaan.moors@epfl.ch> | 2009-11-25 15:48:19 +0000 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@epfl.ch> | 2009-11-25 15:48:19 +0000 |
commit | a3aa801a5181da49ec12164d54782e9d61359dfd (patch) | |
tree | 08005f0cd1152dd1a472c456f14fdbc7513720bc /src/library/scala/Tuple2.scala | |
parent | f1b417f10c1e7f210f5c4782bd8ac0990169f965 (diff) | |
download | scala-a3aa801a5181da49ec12164d54782e9d61359dfd.tar.gz scala-a3aa801a5181da49ec12164d54782e9d61359dfd.tar.bz2 scala-a3aa801a5181da49ec12164d54782e9d61359dfd.zip |
quick fix for #2673: relaxed zipped on Tuple2/T...
quick fix for #2673: relaxed zipped on Tuple2/Tuple3 (back to using A =>
B for constraint instead of A <%< B)
Diffstat (limited to 'src/library/scala/Tuple2.scala')
-rw-r--r-- | src/library/scala/Tuple2.scala | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/src/library/scala/Tuple2.scala b/src/library/scala/Tuple2.scala index 94ccc4c3c3..f558826150 100644 --- a/src/library/scala/Tuple2.scala +++ b/src/library/scala/Tuple2.scala @@ -12,7 +12,7 @@ package scala -import scala.collection.{ TraversableLike, IterableLike } +import scala.collection.{TraversableLike, IterableLike} import scala.collection.generic.CanBuildFrom @@ -29,10 +29,8 @@ case class Tuple2[+T1, +T2](_1:T1, _2:T2) extends Product2[T1, T2] { /** Swap the elements of the tuple */ def swap: Tuple2[T2,T1] = Tuple2(_2, _1) -// TODO: probably loosen zip and zipped from <:< to <%< - - def zip[Repr1, El1, El2, To](implicit w1: T1 <:< TraversableLike[El1, Repr1], - w2: T2 <:< Iterable[El2], + def zip[Repr1, El1, El2, To](implicit w1: T1 => TraversableLike[El1, Repr1], + w2: T2 => Iterable[El2], cbf1: CanBuildFrom[Repr1, (El1, El2), To]): To = { val coll1: TraversableLike[El1, Repr1] = _1 val coll2: Iterable[El2] = _2 @@ -46,19 +44,19 @@ case class Tuple2[+T1, +T2](_1:T1, _2:T2) extends Product2[T1, T2] { b1.result } - def zipped[Repr1, El1, Repr2, El2](implicit w1: T1 <:< TraversableLike[El1, Repr1], w2: T2 <:< IterableLike[El2, Repr2]): Zipped[Repr1, El1, Repr2, El2] - = new Zipped[Repr1, El1, Repr2, El2](_1, _2) + def zipped[Repr1, El1, Repr2, El2](implicit w1: T1 => TraversableLike[El1, Repr1], w2: T2 => IterableLike[El2, Repr2]): Zipped[Repr1, El1, Repr2, El2] + = new Zipped[Repr1, El1, Repr2, El2](_1, _2) class Zipped[+Repr1, +El1, +Repr2, +El2](coll1: TraversableLike[El1, Repr1], coll2: IterableLike[El2, Repr2]) { // coll2: IterableLike for filter def map[B, To](f: (El1, El2) => B)(implicit cbf: CanBuildFrom[Repr1, B, To]): To = { - val b = cbf(coll1.repr) - val elems2 = coll2.iterator + val b = cbf(coll1.repr) + val elems2 = coll2.iterator - for(el1 <- coll1) + for(el1 <- coll1) if(elems2.hasNext) b += f(el1, elems2.next) - b.result + b.result } def flatMap[B, To](f: (El1, El2) => Traversable[B])(implicit cbf: CanBuildFrom[Repr1, B, To]): To = { |