On Mon, 2006-04-24 at 11:42 +0900, Robby R. wrote:
I’ve been seeing people mention the following warnings.
warning: parenthesize argument(s) for future version
For example… some people are blogging and nobody seems to know.
Can someone give some insight to the future of Ruby and parenthesis? I’m
I’m not entirely sure, but I think this warning is about slightly
stricter parsing in future ruby versions, to reduce ambiguities like
p Array.new 3, 1
(irb):3: warning: parenthesize argument(s) for future version
[1, 1, 1]
(i.e. is it p(Array.new(3,1)) or p(Array.new(3),1)). It may be that
future versions will introduce features or change the parser such that
unadorned arguments like the above are treated ‘incorrectly’ (when
compared to now), but that’s just speculation on my part).
I think it’s related to this one (in 1.8.x, 1.9 doesn’t seem to care?):
p Array.new (3+1), 1
(irb):5: warning: don't put space before argument parentheses
[nil, nil, nil, nil]
# => nil
(i.e. is it argument parens or a subexpression). This can help trace
subtle problems in your code, e.g.
p Array.new (3 + 1) / 2, 1
(irb):11: warning: don't put space before argument parentheses
NoMethodError: undefined method `/' for [nil, nil, nil, nil]:Array
p Array.new((3 + 1) / 2, 1)
# => nil
I don’t think (or I hope not, anyway) that ruby will require parens on
all method calls, only where method calls are made involving other
method calls as arguments.