Skip to content

Instantly share code, notes, and snippets.

@aboisvert
Created November 10, 2010 21:51
Show Gist options
  • Save aboisvert/671595 to your computer and use it in GitHub Desktop.
Save aboisvert/671595 to your computer and use it in GitHub Desktop.
Python-style generator in Scala
class Generator[T] extends Iterable[T] {
val buffer = scala.collection.mutable.ArrayBuffer[() => Iterable[T]]()
protected def <<(t: => T) { buffer += (() => List(t)) }
protected def <<<(t: => Iterable[T]) { buffer += (() => t) }
override def iterator = buffer.toStream.flatMap(_.apply).iterator
}
foo
val g = new Generator[String] {
this << "foo"
this << { println("bar!"); "bar" }
this <<< { println("baz!"); (1 to 3) map ("baz: "+_) }
}
g.iterator
g.iterator take 1 foreach (println _)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment