"for" vs "each" in Ruby

each, foreach, iteration, loops, ruby

Solution

This is the only difference:

each:

irb> [1,2,3].each { |x| }
  => [1, 2, 3]
irb> x
NameError: undefined local variable or method `x' for main:Object
    from (irb):2
    from :0

for:

irb> for x in [1,2,3]; end
  => [1, 2, 3]
irb> x
  => 3

With the `for` loop, the iterator variable still lives after the block is done. With the `each` loop, it doesn't, unless it was already defined as a local variable before the loop started.

Other than that, `for` is just syntax sugar for the `each` method.

When `@collection` is `nil` both loops throw an exception:

Exception: undefined local variable or method `@collection' for main:Object

Problem

I just had a quick question regarding loops in Ruby. Is there a difference between these two ways of iterating through a collection? ``` # way 1 @collection.each do |item| # do whatever end # way 2 for item in @collection # do whatever end ``` Just wondering if these are exactly the same or if maybe there's a subtle difference (possibly when `@collection` is nil).

Original source

Related problems