Is there a difference between:
for foo in bar do ...
and
bar.each do |foo| ...
or is it just a question of style?
I prefer the look of "for ... do ...",
but I mostly see each in the samples posted by the Ruby
wizards on the NG.
Thanks
I strongly prefer #each over for, because it is more consistent and
doesn't hide the fact that there really is a method call to #each.
I think I could agree to use for in rake and ERB (though I don't use
ERB at all), because it may have "cleaner" look for a DSL. For
standard Ruby code, use #each just like everyone else :-).
I strongly prefer #each over for, because it is more consistent and
doesn't hide the fact that there really is a method call to #each.
I agree. Because of the consistency, it's very easy to convert an each block to a map (or select or whatever) block, but harder to convert the for construct.
"Fear Dubh" <feardubh@spam.spam> schrieb im Newsbeitrag news:cvslbj$9ns$1@reader01.news.esat.net...
"ts" <decoux@moulon.inra.fr> wrote in message
news:200502271128.j1RBSA019680@moulon.inra.fr...
> Is there a difference between:
> for foo in bar do ...
> and
> bar.each do |foo| ...
uln% ruby -e 'for a in [12] do end; p a'
12
uln%
uln% ruby -e '[12].each do |a| end; p a'
-e:1: undefined local variable or method `a' for main:Object (NameError)
uln%
Thanks!
Does each have a fatter frame then?
Is "for ... in ... do ..." more efficient?
I would believe not, but you can test this yourself (hint "ruby -r profile" and module Benchmark).
Indenpendently of that I strongly recommend the usage of "each" as it is used 99% of the cases and it's simply standard. Although it's not an enforced convention, people will expect that and it makes everybody's life easier to stick to some conventions.
"Robert Klemme" <bob.news@gmx.net> wrote in message
news:38ea7eF5o769pU1@individual.net...
"Fear Dubh" <feardubh@spam.spam> schrieb im Newsbeitrag
news:cvslbj$9ns$1@reader01.news.esat.net...
>
> "ts" <decoux@moulon.inra.fr> wrote in message
> news:200502271128.j1RBSA019680@moulon.inra.fr...
>>
>> > Is there a difference between:
>> > for foo in bar do ...
>> > and
>> > bar.each do |foo| ...
>>
>> uln% ruby -e 'for a in [12] do end; p a'
>> 12
>> uln%
>>
>> uln% ruby -e '[12].each do |a| end; p a'
>> -e:1: undefined local variable or method `a' for main:Object
(NameError)
>> uln%
>>
>>
> Thanks!
>
> Does each have a fatter frame then?
> Is "for ... in ... do ..." more efficient?
I would believe not, but you can test this yourself (hint "ruby -r
profile"
and module Benchmark).
Indenpendently of that I strongly recommend the usage of "each" as it is
used 99% of the cases and it's simply standard. Although it's not an
enforced convention, people will expect that and it makes everybody's life
easier to stick to some conventions.
OK, Thanks,
Now I feel like a bold child, scolded for stuffing my face
with this delicious syntax sugar!
I have a further question:
As ts showed "for ... in ... do" is not exactly the same as "... each do
....",
so is there an "un-sugared" expression that is equivalent to "for ..."?
Is there any circumstance where it would be better to use "for"?
So for is slightly faster. But see, do you wonder what happens if you
execute the above three benchmarks in reverse order? Just replace the
"each" (after the three-element array) with "reverse_each"...
Csaba
···
On 2005-02-27, Robert Klemme <bob.news@gmx.net> wrote:
"Fear Dubh" <feardubh@spam.spam> schrieb im Newsbeitrag
news:cvslbj$9ns$1@reader01.news.esat.net...
Does each have a fatter frame then?
Is "for ... in ... do ..." more efficient?
I would believe not, but you can test this yourself (hint "ruby -r profile"
and module Benchmark).
"Fear Dubh" <feardubh@spam.spam> schrieb im Newsbeitrag news:cvt8g2$g47$1@reader01.news.esat.net...
Hi,
"Robert Klemme" <bob.news@gmx.net> wrote in message
news:38ea7eF5o769pU1@individual.net...
"Fear Dubh" <feardubh@spam.spam> schrieb im Newsbeitrag
news:cvslbj$9ns$1@reader01.news.esat.net...
>
> "ts" <decoux@moulon.inra.fr> wrote in message
> news:200502271128.j1RBSA019680@moulon.inra.fr...
>>
>> > Is there a difference between:
>> > for foo in bar do ...
>> > and
>> > bar.each do |foo| ...
>>
>> uln% ruby -e 'for a in [12] do end; p a'
>> 12
>> uln%
>>
>> uln% ruby -e '[12].each do |a| end; p a'
>> -e:1: undefined local variable or method `a' for main:Object
(NameError)
>> uln%
>>
> Thanks!
>
> Does each have a fatter frame then?
> Is "for ... in ... do ..." more efficient?
I would believe not, but you can test this yourself (hint "ruby -r
profile"
and module Benchmark).
Indenpendently of that I strongly recommend the usage of "each" as it is
used 99% of the cases and it's simply standard. Although it's not an
enforced convention, people will expect that and it makes everybody's life
easier to stick to some conventions.
OK, Thanks,
Now I feel like a bold child, scolded for stuffing my face
with this delicious syntax sugar!
LOL
I have a further question:
As ts showed "for ... in ... do" is not exactly the same as "... each do
...",
so is there an "un-sugared" expression that is equivalent to "for ..."?
Probably this:
x = nil
enum.each {|x| ...}
# x carries the last value here
Is there any circumstance where it would be better to use "for"?
Frankly speaking, I can't remember having felt the need for "for". But you can argue that it looks better for numeric ranges:
$ ruby -e 'for i in 1..5 do puts i end; puts i'
1
2
3
4
5
To be honest, I've completely forgotton "for .. in" and I use #each even for numeric ranges - in spite of the uglyness. Btw, there's also #upto, #downto and #step:
I have to say, I often wonder why people post Ruby code in this
format. It seems to me -e coupled with multi-line code is terribly
inconvenient... unless I'm missing something.