Joe Van Dyk
12/8/2005 2:55:00 PM
On 12/8/05, Joe Van Dyk <joevandyk@gmail.com> wrote:
> On 12/8/05, James Edward Gray II <james@grayproductions.net> wrote:
> > On Dec 8, 2005, at 8:13 AM, Joe Van Dyk wrote:
> >
> > > On 12/8/05, Steve Litt <slitt@earthlink.net> wrote:
> > >> Hi all,
> > >>
> > >> It looks to me like when you use an iterator (each for instance),
> > >> you can make
> > >> the block either from a do/end pair, or from curly braces. All
> > >> things being
> > >> equal, I'd greatly prefer to use do/end. Are there any differences
> > >> in runtime
> > >> speed, capabilities, or Rubyness?
> > >
> > > Typically,
> > >
> > > 5.times { |i| puts i }
> > >
> > > 5.times do |i|
> > > puts i
> > > end
> > >
> > > Generally people save do .. end for multiline stuff. Don't think
> > > there's a difference in speed.
> >
> > Another convention some use is that { ... } are for the times when
> > you care about the return value and do ... end is for when you're
> > interested in the side effects. For example:
> >
> > sum = [1, 2, 3].inject { |sum, n| sum + n } # return value
> >
> > File.open("total.txt", "w") do |file| # side effects
> > file.puts sum
> > end
>
> Good point. And also use { ... } if you want to do crazy chains like
>
> [1, 2, 3].collect { |a| i * a }.each { |a| puts a }
Oops, that first 'i' should be an 'a'.