[Assorted-commits] SF.net SVN: assorted:[1798] sandbox/trunk/src/scala/FlatMap.scala
Brought to you by:
yangzhang
From: <yan...@us...> - 2011-07-14 21:53:55
|
Revision: 1798 http://assorted.svn.sourceforge.net/assorted/?rev=1798&view=rev Author: yangzhang Date: 2011-07-14 21:53:49 +0000 (Thu, 14 Jul 2011) Log Message: ----------- Add FlatMap exploration Added Paths: ----------- sandbox/trunk/src/scala/FlatMap.scala Added: sandbox/trunk/src/scala/FlatMap.scala =================================================================== --- sandbox/trunk/src/scala/FlatMap.scala (rev 0) +++ sandbox/trunk/src/scala/FlatMap.scala 2011-07-14 21:53:49 UTC (rev 1798) @@ -0,0 +1,40 @@ +// for deconstructing flatMap +// try scala -Xprint:typer -Ytyper-debug + +object FlatMap extends App { + class XIterable[A](xs: TraversableOnce[A]) { + def izip[B](ys: TraversableOnce[B]) = xs.toIterator zip ys.toIterator + } + implicit def Iterable2XIterable[A](xs: TraversableOnce[A]) = new XIterable(xs) + implicit def Array2XIterable[A](xs: Array[A]) = new XIterable(xs) + + { + val xss = Array(Array(0,1,2),Array(3,4,5)) + val ys = Array(6,7,8) + for (xs <- xss.iterator; (x,y) <- xs.iterator zip ys.iterator) { + println((x,y)) + } + } + /* desugars into: + xss.iterator.foreach( xs => + xs.iterator.zip(ys.iterator).filter( pair => + pair match { + case scala.Tuple2((x @ _), (y @ _)) => true + case _ => false + } + ).foreach( x => + x match { + case scala.Tuple2((x @ _), (y @ _)) => println((x, y)) + } + ) + ) + */ + + { + val xss = Array(Array(0,1,2),Array(3,4,5)) + val ys = Array(6,7,8) + for (xs <- xss.iterator; (x,y) <- xs izip ys) { + println((x,y)) + } + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |