Hi,
In message "Re: Array#each Looping Gotcha"
on Thu, 20 Apr 2006 07:43:46 +0900, Nathan Olberding <nathan.olberding / gmail.com> writes:
|items.each do |x|
| if x == ""
| items.delete(x)
| end
|end
|
|
|If items.each referred to items[] by reference, this would make sense.
|But since it references by value, you're literally changing the array
|live, as you're iterating through it. This means that, if you delete an
|item in mid-iteration, you change the index of items[]. Since you
|deleted something, you skip the next item.
|
|1) Do I have this right?
I'm not sure what you mean by the word "right" here. It's ok for you
to write that kind of program, but I don't (can't) guarantee you will
get what you expect, although I try my best. It might cost you much
to guarantee loop safety. It shouldn't crash in any case though.
|2) Am I right in assuming that it's possible to create an infinite loop
|this way by continually push()ing things on to items[]?
Yes, Ruby obeys you if you command it to loop infinitely.
matz.