SyncEnumerator creates an Enumerable object from multiple Enumerable objects and enumerates them synchronously.
require 'generator' s = SyncEnumerator.new([1,2,3], ['a', 'b', 'c']) # Yields [1, 'a'], [2, 'b'], and [3,'c'] s.each { |row| puts row.join(', ') }
Creates a new SyncEnumerator which enumerates rows of given Enumerable objects.
# File generator.rb, line 186
def initialize(*enums)
@gens = enums.map { |e| Generator.new(e) }
end
Enumerates rows of the Enumerable objects.
# File generator.rb, line 214
def each
@gens.each { |g| g.rewind }
loop do
count = 0
ret = @gens.map { |g|
if g.end?
count += 1
nil
else
g.next
end
}
if count == @gens.size
break
end
yield ret
end
self
end
Returns true if the given nth Enumerable object has reached the end. If no argument is given, returns true if any of the Enumerable objects has reached the end.
# File generator.rb, line 205
def end?(i = nil)
if i.nil?
@gens.detect { |g| g.end? } ? true : false
else
@gens[i].end?
end
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please see Improve the docs, or visit Documenting-ruby.org.