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
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
Thank you its all starting to steep in…I think
On Tue, Mar 22, 2011 at 11:15 AM, Sebastian Grl
[email protected] wrote:
it is just syntatical sugar. Both are essentially equal.
The only difference is that each is a method of an Enumerable.
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
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,