Difference between for and someclass.each do |var|

Hello everyone,

I come from the low level C land and I am really loving ruby but I am
trying to understand its behaviour.

Can anyone tell me if there is something different going on under the
hood between these two loops.

for var in class.each do
  #stuff
end

class.each do |var|
  #stuff
end

···

--
Posted via http://www.ruby-forum.com/.

Hej Tyrel,

it is just syntatical sugar. Both are essentially equal.
The only difference is that each is a method of an Enumerable.

Best,
Sebastian

···

--------------------------
Sebastian Gräßl
sebastian@validcode.me
http://validcode.me

Thank you its all starting to steep in...I think

···

--
Posted via http://www.ruby-forum.com/.

That's not true. There is also a scoping difference:

11:43:58 ~$ ruby <<CODE
a=%w{foo bar}
for e in a
p e
end
p e
a.each do |x|
p x
end
p x
CODE

"foo"
"bar"
"bar"
"foo"
"bar"
-:9: undefined local variable or method `x' for main:Object (NameError)
11:44:19 ~$

A block opens a new scope wile for doesn't.

I believe there is also a slight runtime difference but that really
only matters if you need to squeeze the last bit of performance out of
your application.

Kind regards

robert

···

On Tue, Mar 22, 2011 at 11:15 AM, Sebastian Gräßl <sebastian@validcode.me> wrote:

it is just syntatical sugar. Both are essentially equal.
The only difference is that each is a method of an Enumerable.

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

Hi,

for var in class.each do
#stuff
end

class.each do |var|
#stuff
end

it is just syntatical sugar. Both are essentially equal.
The only difference is that each is a method of an Enumerable.

In a for/in loop, you need not call #each method.
I think following two code snippets are mostly equal.

# the #each method call isn't needed
for var in obj do
  # stuff
end

# mostly equivalent to the previous snippet
obj.each do |var|
  # stuff
end

Note:
A #each method returns a Enumerator object if you don't provide a block.

~$ irb
ruby-1.9.2-p136 :001 > .each # provide no block
=> #<Enumerator: :each>
ruby-1.9.2-p136 :002 > .each {} # provide a block
=>

Regards,

···

--
NOBUOKA Yu