Chad Perrin wrote:
> On Fri, Dec 09, 2005 at 05:00:13PM +0900, Logan Capaldo wrote:
> >
> > Doubtful. Matz. has been trying to move in the opposite direction:
> > irb(main):003:0> puts ("Hello", "World")
> > (irb):3: warning: don't put space before argument parentheses
> > Hello
> > World
> > => nil
> >
>
> I'd be happy with it either way, as long as it's consistent.
>


Without space, it's consistent.
It's not always what we want it to mean, though.

Take this example (with which I frequently inconvenience myself):

#-----------------------------------------------------
(0..5).map do |n|
  10*n
end
#-----------------------------------------------------

* I want to see the result, so I prepend "p ":

#-----------------------------------------------------
p (0..5).map do |n|
  10*n
end
#=> C:/TEMP/rb284.TMP:1: warning: (...) interpreted as grouped expression
#  [- Okay, that's what it is.]
#=> [0, 1, 2, 3, 4, 5]
#  [- But that's not what I wanted.  The block binds to method #p
#  - the argument to #p is ((0..5).map) - an Array (in Ruby 1.8.2)
#-----------------------------------------------------

* Remove the space after p

#-----------------------------------------------------
p(0..5).map do |n|
  10*n
end
#=> 0..5
#  [Oh, no !]
#=> C:/TEMP/rb284.TMP:1: undefined method `map' for nil:NilClass (NoMethodError)
#  [Aargh!]
#-----------------------------------------------------

* Parenthesise correctly but "uglily" ;))

#-----------------------------------------------------
p((0..5).map do |n|
  10*n
end)
#=> [0, 10, 20, 30, 40, 50]  # no problem at all
#-----------------------------------------------------

* But we don't need to do any of those.
* From the initial example, just prepend "<var> = "
  and there's no "binding" issue ...

#-----------------------------------------------------
r = (0..5).map do |n|
  10*n
end
p r    #=> [0, 10, 20, 30, 40, 50]
#-----------------------------------------------------

IMHO, it's our problem, not Ruby's.
The problem could appear in many places but, for me,
it's almost always when prepending  p, puts or print.

Things could be a lot worse than this ;)


daz