From: Roshan James Date: 2005-03-11T15:57:08+09:00 Subject: Re: Is iterating in lock-step possible? Thanks for all the mails. Like William called out, this did not solve the underlying problem. In my post, I chose the array.each only as an example. Its not arrays for which I want to do this with - I want to solve the problem for iterator calls. If zip() internally creates a list of values from both iterations, then it does not help me. I want to be able to do the actual computation of the iterator calls in lock-step. I was trying to write code where I can have two or more computations which generate values that I need to compare - with the ruby syntax tying iterator usage to the code blocks by syntax, there is no way I can do this. This is especially applicable when the iterators potentially return an infinite stream of values. (Except for using contiuations... Which is not really so much of a solution, because I might as well not have used an iterator in a first place if I could create good coroutines) Yes I understand that I take a hit (wrt perf by choosing ruby), but that's a BAD argument to favour wrapping state first by a iterators and then once over by a continuation. On a related note, I had asked this question about C# and it looks like C# can do both of these cleanly - foreach( t in foo()) { foreach( t in bar()) { //nested } } And - IEnumerator ie1 = a.foo().GetEnumerator(); IEnumerator ie2 = a.bar().GetEnumerator(); while (ie1.MoveNext() && ie2.MoveNext()) { //lockstep } Since Ruby is open to (I believe) a major language redesign these days, this might be a good feature to consider adding. Roshan